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)
任何帮助或指导都将不胜感激。在
python目录结构生成库,使用CMake构建平台无关的目录结构相关推荐
- qt生成库文件之后自动复制到指定目录
目的 qt编译完成一个库之后,自动将这个库复制到指定目录下. Step1: 在Pro文件中添加如下: win32{CONFIG(release,debug|release){target.path = ...
- python假数据生成库-faker简介
安装faker pip install Faker 1.获取locale 使用Faker的时候,需要设置区域(locale),例如生成一个名字的时候,根据设置的区域决定是中文名字.英文名字还是其他语言 ...
- 词云生成库WordCloud详解(一):概述、ImageColorGenerator类
当前wordcloud版本:1.81 项目地址:https://github.com/amueller/word_cloud API.案例地址:https://amueller.github.io/w ...
- [硬货]|如何利用深度学习写诗歌(使用Python进行文本生成)
翻译:李雪冬 前 言 从短篇小说到写5万字的小说,机器不断涌现出前所未有的词汇.在web上有大量的例子可供开发人员使用机器学习来编写文本,呈现的效果有荒谬的也有令人叹为观止的. 由于自然语言处理( ...
- 计算机基础课目录,计算机基础课程Word目录自动生成机制
徐雪峰 摘 要: Word的目录自动生成功能,简单易用,但长文编辑.多人协作时极容易出错,这也是很多高校"计算机基础"课程Word部分教学的一个重点和难点.从目录自动生成的功能看 ...
- PaddlePaddle入门|百度零基础实践深度学习课程笔记——使用Python语言和Numpy库来构建神经网络模型
前面的课程已经讲解了Python的一些基础操作和使用Notebook实现编程的基础知识,下面通过用Python语言和Numpy库来构建神经网络模型来初步实践. 波士顿房价预测任务 问题描述 波士顿房价 ...
- muduo网络库:18---muduo简介之(muduo库的由来、编译安装、目录结构、代码结构、线程模型)
一.由来 2010年3月陈硕先生写了一篇<学之者生,用之者死--ACE历史与简评>(文章参阅:https://blog.csdn.net/Solstice/article/details/ ...
- cmake使用教(一)多目录下多个文件的构建
1.采用 out-of-source 外部构建多个目录多个文件 这里的文件存储方式如下: 其中build是构建目录,即构建的结果和中间产物都在该目录下 include是包含目录 src是子函数的目录或 ...
- windows平台下使用cmake构建静态lib库以及使用静态lib库gtest项目
有些时候我们需要将部分代码编译成单独的一个库,然后在另一个项目中去使用这个库 大部分是linux环境下的指令,但是也差不是很多 记录一下构建的经过 目录 1.使用cmake构建及使用lib库 构建li ...
最新文章
- Linux下安装JDK和Eclipse
- 我眼中的Linux设备树(五 根节点)
- 只读账号设置-db_datareader
- java环境配置常用链接
- 二十、PHP框架Laravel学习笔记——模型的作用域
- Java的一些学习心得
- creator 静态属性_CocosCreator cc.class声明类
- oracle和mysql文件怎么打开_mysql与oracle数据库停止与打开的批处理文件
- 安全微软微软安全新闻聚焦-双周刊第三十二期
- 他称向导师下跪,仍被强制退学,5年博士白读,双方各执一词,同门师兄也有回应!...
- linux下传输文件命令
- 网易云音乐的亏损,是社区经济的通病?
- 中文简体与繁体的转换
- 软件测试-进阶篇:设计测试用例-文本框
- 【基本面的量化分析与投资的回报可能 - 上篇】
- Jetpack Compose之手势使用
- 软件测试黑马程序员课后答案_软件测试课后参考答案
- 修改autor后面邮箱_最后冲刺!2020年国自然标书终极修改和形式审查要点!!!...
- Apollo自动驾驶50讲笔记
- 制作一个创意的生日快乐网页祝福网站送给心爱的她(HTML+CSS+JS)
热门文章
- 亚马逊消费者业务宣布永久关闭 Oracle 数据库,去O新进展;华为发布最新5G全系列解决方案;苹果正研究新设备“智能戒指”……...
- @程序员 天冷了,你准备抱键盘还是抱女朋友取暖?
- 程序员求助:被领导强行要求写Bug该怎么办?网友的回答让我笑翻
- r语言实现岭回归_数据分析中常见的七种回归分析以及R语言实现(五)
- linux命令查看磁盘使用情况,linux查看磁盘使用情况命令
- Vue Bootstrap 静态服务器 实现文件追加上传、断点续传、极速秒传
- SpringCloudGateway 集成 nacos 整合实现动态路由_04
- SpringBoot 集成 MyBatisPlus 模板
- 工作流实战_19_flowable 任务委派
- Mysql代码生成器转Oracle代码生成