我试图为我的跨平台项目创建一个目录结构,但遇到了一些问题。我已经让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构建平台无关的目录结构相关推荐

  1. qt生成库文件之后自动复制到指定目录

    目的 qt编译完成一个库之后,自动将这个库复制到指定目录下. Step1: 在Pro文件中添加如下: win32{CONFIG(release,debug|release){target.path = ...

  2. python假数据生成库-faker简介

    安装faker pip install Faker 1.获取locale 使用Faker的时候,需要设置区域(locale),例如生成一个名字的时候,根据设置的区域决定是中文名字.英文名字还是其他语言 ...

  3. 词云生成库WordCloud详解(一):概述、ImageColorGenerator类

    当前wordcloud版本:1.81 项目地址:https://github.com/amueller/word_cloud API.案例地址:https://amueller.github.io/w ...

  4. [硬货]|如何利用深度学习写诗歌(使用Python进行文本生成)

    翻译:李雪冬 前  言 从短篇小说到写5万字的小说,机器不断涌现出前所未有的词汇.在web上有大量的例子可供开发人员使用机器学习来编写文本,呈现的效果有荒谬的也有令人叹为观止的.  由于自然语言处理( ...

  5. 计算机基础课目录,计算机基础课程Word目录自动生成机制

    徐雪峰 摘  要: Word的目录自动生成功能,简单易用,但长文编辑.多人协作时极容易出错,这也是很多高校"计算机基础"课程Word部分教学的一个重点和难点.从目录自动生成的功能看 ...

  6. PaddlePaddle入门|百度零基础实践深度学习课程笔记——使用Python语言和Numpy库来构建神经网络模型

    前面的课程已经讲解了Python的一些基础操作和使用Notebook实现编程的基础知识,下面通过用Python语言和Numpy库来构建神经网络模型来初步实践. 波士顿房价预测任务 问题描述 波士顿房价 ...

  7. muduo网络库:18---muduo简介之(muduo库的由来、编译安装、目录结构、代码结构、线程模型)

    一.由来 2010年3月陈硕先生写了一篇<学之者生,用之者死--ACE历史与简评>(文章参阅:https://blog.csdn.net/Solstice/article/details/ ...

  8. cmake使用教(一)多目录下多个文件的构建

    1.采用 out-of-source 外部构建多个目录多个文件 这里的文件存储方式如下: 其中build是构建目录,即构建的结果和中间产物都在该目录下 include是包含目录 src是子函数的目录或 ...

  9. windows平台下使用cmake构建静态lib库以及使用静态lib库gtest项目

    有些时候我们需要将部分代码编译成单独的一个库,然后在另一个项目中去使用这个库 大部分是linux环境下的指令,但是也差不是很多 记录一下构建的经过 目录 1.使用cmake构建及使用lib库 构建li ...

最新文章

  1. 科研文献|结肠直肠癌早期检测中跨群体微生物标记物的鉴定
  2. R语言ggplot2可视化:可视化堆叠的直方图、在bin中的每个分组部分添加数值标签、使用position_stack函数设置
  3. HALCON选择标定板文件
  4. 实战SSM_O2O商铺_36【商品】商品列表之Dao+Service+Controller层的实现
  5. Linux Distribution Timeline for 2010(Linux 2010 年发行版时间线/族谱/发展图)
  6. 孩子学计算机最佳年龄,孩子学编程最佳年龄是多少
  7. cvc降噪和主动降噪_小米降噪项圈蓝牙耳机来了:Hybrid主动降噪技术
  8. 自走棋电脑版_手游版《自走棋》上线试玩
  9. 你真的了解特洛伊木马吗!
  10. java学习笔记七——继承
  11. python3自动化软件发布系统_PythonPC客户端自动化实现原理(pywinauto)
  12. python实现在线答题_python实现用户答题功能
  13. zsh历史记录文件损坏: zsh: corrupt history file /home/admin/.zsh_history
  14. 什么是归纳法、数学归纳法
  15. 放量十字星——黎明前的曙光还是黑暗前的夕阳
  16. Oracle 12c中的MGMTDB
  17. java未来三年的工作计划,未来三年的工作计划
  18. Linux命令如何将竖行改成横行,用DECODE和CASE WHEN将多行单列数据改为单行多列数据(即竖向排列改为横向排列)...
  19. 安卓手机APP进行自动化点击软件详解
  20. 今日全国油价查询2022-03-08

热门文章

  1. 漫画:什么是二分查找?
  2. Ubuntu上安装Hadoop集群
  3. php有多少种占位符,php 占位符问题?
  4. 一分钟在Linux 环境 搭建 SFTP服务器
  5. Spring Tool Suite 4安装Lombok
  6. Tomcat闪退的解决办法
  7. ppt护理文书流程图_护理文书书品管圈ppt
  8. 网站备案靠谱吗_网站外包靠谱吗目前都是什么价位
  9. 服务器nasjava文件共享,办公室文件共享之如何搭建共享服务器或文件共享服务器nas?...
  10. android 子module混淆_Android 多模块打包混淆填坑记