Python CMake 3.5中的链接器标志位置
我有一个非常奇怪的问题:如何让CMake 3.5在文件后放置链接器标志? 我正在尝试编译一个调用Python脚本的C++。我的CMakeList.cpp中有以下两行:Python CMake 3.5中的链接器标志位置,python,c++,cmake,Python,C++,Cmake,我有一个非常奇怪的问题:如何让CMake 3.5在文件后放置链接器标志? 我正在尝试编译一个调用Python脚本的C++。我的CMakeList.cpp中有以下两行: add_executable (Python_trivium PyCall.cpp) set_target_properties (Python_trivium PROPERTIES COMPILE_FLAGS "${PYTHON_CFLAGS}" Python_trivium PRIVATE "${PYT
add_executable (Python_trivium PyCall.cpp)
set_target_properties (Python_trivium PROPERTIES COMPILE_FLAGS "${PYTHON_CFLAGS}" Python_trivium PRIVATE "${PYTHON_LDFLAGS}")
这将生成链接错误。通过“make VERBOSE=1”,我可以看到链接器命令如下所示:
/usr/bin/c++ -L/usr/lib/python2.7/config-x86_64-linux-gnu -L/usr/lib -lpython2.7 -lpthread -ldl -lutil -lm -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions CMakeFiles/Python_trivium.dir/PyCall.cpp.o -o Python_trivium
标志位于文件之前的位置。对于Python.h中的每个命令,我都会得到一个“undefined reference”错误,例如
/home/portolan/emanuele/MAST_project/pyhelper.hpp:12: undefined reference to `Py_Initialize'
如果在文件后反转并放置标志,则一切正常:
/usr/bin/c++ CMakeFiles/Python_trivium.dir/PyCall.cpp.o -o Python_trivium -L/usr/lib/python2.7/config-x86_64-linux-gnu -L/usr/lib -lpython2.7 -lpthread -ldl -lutil -lm -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions
有没有办法让CMake以这种方式格式化链接器命令行
谢谢,
米歇尔我发现我的错误是试图手动操作。CMake可以为我做得更好:
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
message("PYTHONLIBS_VERSION_STRING: ${PYTHONLIBS_VERSION_STRING}")
不幸的是,它找到了3.5,而我需要2.7…您的
set\u target\u属性
调用看起来格式不正确。在这个函数中,PRIVATE
属性没有任何意义,您将列出目标Python\u trivium
两次。您确定这是您正在使用的代码吗?您可以在调用find\u package()
之前设置变量,以告诉CMake查找特定版本。您还可以使用PYTHON\u库
和PYTHON\u INCLUDE\u DIR
指向特定的PYTHON安装。对于cmake>=3.12
,我建议使用:find\u包(PYTHON 2.7必需的组件开发)
。然后使用目标:Python::Python