python目录结构生成库,使用CMake构建平台无关的目录结构

我试图为我的跨平台项目创建一个目录结构,但遇到了一些问题。我已经让CMake确定了放置库和可执行文件的适当位置,但这种结构仅适用于Windows。在

我的结构如下所示:项目目录

垃圾箱

可执行文件

图书馆

图书馆

Python

增压模块

python脚本

这在Windows上运行得很好,我将模块编译成一个.pyd并将其放在python文件夹中。但是这个问题出现在我的Linux版本中。而不是增加-模块.so在python文件夹中,它将它放入带有测试库的lib文件夹中。在

我有3个CMakeLists.txt文件当前文件。一个是在我的根项目中的可执行文件。第二个是在我写的一个小测试库中。第三个是我构建的测试boost::python模块,它从第二个模块导出一个类。它们的顺序如下。在

底座:cmake_minimum_required(VERSION 2.6)

project(renderer2d)

#enable debug symbols by default

if(CMAKE_BUILD_TYPE STREQUAL "")

set(CMAKE_BUILD_TYPE Debug)

endif()

#(you can also set on cl: -D CMAKE_BUILD_TYPE=Release)

#place outside of Debug/Release folders

SET(OUTPUT_BINDIR ${PROJECT_BINARY_DIR}/bin)

MAKE_DIRECTORY(${OUTPUT_BINDIR})

SET(OUTPUT_LIBDIR ${PROJECT_BINARY_DIR}/lib)

MAKE_DIRECTORY(${OUTPUT_LIBDIR})

SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_LIBDIR} CACHE PATH "build directory")

SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_BINDIR} CACHE PATH "build directory")

IF(WIN32)

SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_BINDIR} CACHE PATH "build directory")

ELSE(WIN32)

SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_LIBDIR} CACHE PATH "build directory")

ENDIF(WIN32)

# For each configuration (Debug, Release, MinSizeRel... and/or anything the user chooses)

FOREACH(CONF ${CMAKE_CONFIGURATION_TYPES})

# Go uppercase (DEBUG, RELEASE...)

STRING(TOUPPER "${CONF}" CONF)

SET("CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_LIBDIR}")

SET("CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_BINDIR}")

IF(WIN32)

SET("CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_BINDIR}")

ELSE()

SET("CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_LIBDIR}")

ENDIF()

ENDFOREACH()

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

#set the source directory

file(GLOB SOURCES src/*.cpp)

add_subdirectory(shape)

add_subdirectory(py_shape)

#define sources and executable

set(EXECUTABLE_NAME "renderer2d")

add_executable(${EXECUTABLE_NAME} ${SOURCES})

#find python

find_package(PythonInterp)

find_package(PythonLibs 2.7 REQUIRED)

include_directories(${PYTHON_INCLUDE_DIRS})

#detect and add SFML

#this line checks a cmake file for hints on where to find cmake

set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules" ${CMAKE_MODULE_PATH})

#find any version 2.x of SFML

#see the FindSFML.cmake file for additional details and instructions

find_package(SFML 2 REQUIRED system window graphics network audio)

include_directories(${SFML_INCLUDE_DIR})

#find and include Boost python libraries

set(Boost_USE_STATIC_LIBS OFF)

find_package(Boost COMPONENTS python system filesystem REQUIRED)

include_directories(${Boost_INCLUDE_DIR})

#link all found libraries to the executable

if(WIN32)

target_compile_definitions(${EXECUTABLE_NAME} PRIVATE $:BOOST_ALL_NO_LIB>)

endif(WIN32)

target_link_libraries(${EXECUTABLE_NAME} ${PYTHON_LIBRARIES} ${SFML_LIBRARIES} ${Boost_LIBRARIES} shape)

#install target

install(TARGETS ${EXECUTABLE_NAME} DESTINATION bin)

测试库:

^{pr2}$

Boost Python模块:cmake_minimum_required(VERSION 2.8)

project(py_shape CXX)

#set file variables

file(GLOB SOURCE src/*.cpp)

file(GLOB HEADERS inc/*.hpp)

#place outside of Debug/Release folders

SET(OUTPUT_BINDIR ${CMAKE_BINARY_DIR}/python)

MAKE_DIRECTORY(${OUTPUT_BINDIR})

SET(OUTPUT_LIBDIR ${CMAKE_BINARY_DIR}/lib)

MAKE_DIRECTORY(${OUTPUT_LIBDIR})

SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_LIBDIR} CACHE PATH "build directory")

SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_BINDIR} CACHE PATH "build directory")

IF(WIN32)

SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_BINDIR} CACHE PATH "build directory")

ELSE(WIN32)

SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_LIBDIR} CACHE PATH "build directory")

ENDIF(WIN32)

# For each configuration (Debug, Release, MinSizeRel... and/or anything the user chooses)

FOREACH(CONF ${CMAKE_CONFIGURATION_TYPES})

# Go uppercase (DEBUG, RELEASE...)

STRING(TOUPPER "${CONF}" CONF)

SET("CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_LIBDIR}")

SET("CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_BINDIR}")

IF(WIN32)

SET("CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_BINDIR}")

ELSE()

SET("CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_LIBDIR}")

ENDIF()

ENDFOREACH()

#find packages

find_package(PythonInterp)

find_package(PythonLibs 2.7 REQUIRED)

include_directories(${PYTHON_INCLUDE_DIRS})

find_package(Boost COMPONENTS python REQUIRED)

include_directories(${Boost_INCLUDE_DIR})

set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules" ${CMAKE_MODULE_PATH})

find_package(SFML 2 REQUIRED system window graphics network audio)

include_directories(${SFML_INCLUDE_DIR})

#build the library

add_library(python_shape MODULE ${SOURCE})

#enable C++11 if available

target_compile_features(python_shape PRIVATE cxx_range_for)

#link library

target_link_libraries(python_shape shape ${Boost_LIBRARIES} ${PYTHON_LIBRARIES} ${SFML_LIBRARIES})

#drop "lib" from the library name

set_target_properties(python_shape PROPERTIES PREFIX "")

if(WIN32)

#set extension to ".pyd"

set_target_properties(python_shape PROPERTIES SUFFIX ".pyd")

endif(WIN32)

任何帮助或指导都将不胜感激。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值