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)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos 怎样下载php,centos下怎样安装软件

centos下安装软件的方法是:centos安装软件的命令1、rpm包的安装1.安装一个包# rpm -ivh2.升级一个包# rpm -Uvh3.移走一个包# rpm -e4.安装参数--force 即使覆盖属于其它包的文件也强迫安装--nodeps 如果该RPM包的安装依赖其它包,即使其它包没装&#xf…

php fpm 安装配置,php php+fpm安装配置

sudo apt - get install php5 - cgi php5 - mysql php5 - fpm php5 - curl php5 - gd php5 - idn php - pear php5 - imagick php5 - imap php5 - mcrypt php5 - mhash php5 - ming php5 - pspell php5 - recode php5 - snmp php5 - tidy php5 - xmlrpc php5 - xsl打开 /etc/ph…

php post 微信沙箱,微信支付平台错误:获取沙箱密钥失败,确保交易密钥是

按官方提示进行获取沙箱密钥的时候,久试不爽,总是提示错误 :“获取沙箱密钥失败,确保交易密钥是否正确”。这个纯粹是微信平台挖的坑呀,文档没有详细的进行一些讲解,也没有提示需要key,下面来说…

shell脚本执行oracle删除表,shell脚本操作oracle删除表空间、创建表空间、删除用户...

oracle下表空间的导出,用户的删除,表空间删除,用户新建,表空间新建,数据导入的shell使用非oracle用户执行该脚本参数说名$1:base表空间的用户名$2:同步表空间的用户名使用场景测试用&#xff0c…

PHP标题获取数据库内容,php – 如何从数据库获取项目的标题并将其发送到CodeIgniter中的标题模板...

尝试这个>型号更改>控制器已更改。在模型中function get_card($card){$query $this->db->query("SELECT * FROM table_name WHERE creditcards $card ");$result $query->result_array();$count count($result); # Newif(empty($count)){ # Newre…

php教程调用数据库,PHP数据库调用类调用实例,php数据库调用实例_PHP教程

PHP数据库调用类调用实例,php数据库调用实例config("dnsaaa;uidsa;pwdsa;dbnametest");//3.选择数据库$dbname $db->select_db("test");//4.设置允许调试$db->debug true;//5.执行一条不返回结果的SQL语句$db->execute("insert…

linux显示磁盘使用情况命令,Linux中监控磁盘分区和使用情况的几个工具

导读在文章中将讨论Linux中可用于监视磁盘使用情况的命令行实用程序,提供有关总大小容量、已用总量、文件系统信息和分区信息等。让我们看看这些工具如何帮助检索这些信息df命令df是一个Linux命令行实用程序,用于监视Linux磁盘使用情况。df命令显示文件系…

linux网络是文件吗,linux网络配置文件是什么意思

离开了么放得下我么回来了么还会爱我么新兵答主07-22TA获得超过2383个赞网卡的配置:1.网卡配置文件对于网卡信息的配置通常包括:配置IP地址、子网掩码和网关。网卡信息保存在网卡配置文件中。网卡配置文件位于/etc/sysconfig/network-scripts目录下。一块…

cd linux给u盘安装程序,使用U盘安装CDlinux

3、先把u盘插在电脑上与电脑连接,格式化成“FAT”文件系统,更改卷标为“CDLINUX”,之后再打开UltraISO工具进行写入:a、这里把你下载好的CDlinux文件打开。b、点击“写入硬盘映像”c、这里直接默认就好,点击“写入”4、…

linux7 telnet乱码,CentOS7安装配置telnet-server

1.安装xinetd和telnet-serveryum -y install telnet-server xinetd2.启服务(服务管理方式和CentOS6稍有区别)systemctl enable xinetd.serversystemctl enable telnet.socketsystemctl start telnet.socketsystemctl start xinetd.server注意:因为是由xinetd管理,这…

windows和linux存储float,C语言float型数据在内存中的储存方式

菜单导航/URHere/面包屑,通过CSS中的content简洁表达代码比如我们要写一个菜单导航/URHere/面包屑,如: 首页 > 个人中心 > 修改密码 代码: tolua杂记1 字符串调用luaFunc :DoString public class CallLuaFunction : MonoBehaviour { private…

Linux编译C没有文件名,crt1.o linux x64上没有这样的文件c编译错误

我正在linux平台上迈出第一步.我安装了Centos x64.我正在尝试构建一个包含几个函数和几个单元测试的小程序.我使用Netbeans 7.1.2作为开发环境.以下是构建过程的输出:CLEAN SUCCESSFUL (total time: 671ms)"/usr/bin/gmake" -f nbproject/Makefile-Debug.…

linux nmap下载教程,Linux_在Linux系统上用nmap扫描SSL漏洞的方法,以下载nmap 6.45及以上版本。如 - phpStudy...

在Linux系统上用nmap扫描SSL漏洞的方法以下载nmap 6.45及以上版本。如果懒的重新安装,可以直接下载ssl-heartbleed.nse 脚本。使用nmap 6.45扫描服务器心脏出血漏洞(heartbleed)的具体方法(步骤)如下:当然,你要先按好nmap,自己可以…

Linux的网络协议族是什么,Linux 网络协议的概述

网络层协议网络层协议主要包括 IP、ICMP(网络控制报文协议)、ARP(地址解析协议)IP协议该协议被设计成互联分组交换通信网,以形成一个网际通信环境。它负责在源主机和目的地主机之间传输来自其较高层软件的称为数据报文的数据块,它在源和目的地之间提供非…

linux百度文字识别,基于Linux平台的图片文字识别系统

摘要:图片文字识别OCR(Optical Character Recognition,光学字符识别)应用非常广泛。例如DNA序列图片识别;PDF文字识别;车牌号码自动识别;手机上的手写输入识别等。近年来该应用更加广泛,必然出现在教育领域的一款手机应用,将手机把试卷拍照查询答案,首先就是图片文字…

zenmap扫描出来linux,如何在Linux上使用NMAP安全扫描器

Nmap是一个免费的开源网络发现和安全审计实用程序,在Linux用户社区中被广泛使用,因为它使用起来非常强大。 Nmap通过在特定目标(通过IP)发送数据包,并通过解释传入的数据包来确定哪些帖子被打开/关闭,扫描系统上运行什么服务&…

linux上的中国象棋游戏下载,中国象棋下载_中国象棋最新下载_玩一玩游戏

中国象棋是起源于中国,的一种棋类游戏,属于两个人之间的对抗,在中国有着悠久的历史。由于它的器皿简单,趣味性强,它已经成为一种非常受欢迎的棋类活动。中国象棋是中华民族的文化瑰宝,历史悠久,…

c语言字面量的作用是为变量,C语言(五) C 全局变量,局部变量,静态变量和常量...

一. 全局变量全局变量是在所有函数体的外部定义的,程序的所有部分(其他文件的代码)都可以使用。全局变量不受作用域的影响。全局变量的生命周期一直到程序的结束,全局变量是静态存储方式。例:#include #include /* a 就是一个全局变量*/int a…

河南理工大学c语言报告封面,河南理工大学图书信息管理系统设计_纯c语言课程设计.doc...

河南理工大学图书信息管理系统设计_纯c语言课程设计C语言课程设计报告题 目:图书信息管理系统设计河南理工大学计算机学院目 录第一章 题目与要求1.1 问题提出11.2 本系统涉及的知识点11.3 功能要求1第二章 功能设计2.1 算法设计12.2 部分模块流程图4第三章 程序代码…

vfp程序转换为c语言程序软件,c语言程序设计及vfp程序设计试题.doc

c语言程序设计及vfp程序设计试题高级语言(C)程序设计部分(满分100分)一、单项选择题(每小题1分,共20分)1、在C语言中,不正确的int类型的常数是( )A、32768  B、0  C、037   D、0xAF2、设变量x为float型且已经赋值,则以下语句中能够将x中…