CMake 3.5中的链接器标志位置

2024-10-06 12:35:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常奇怪的问题:如何让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 "${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以这种方式格式化链接器命令行

谢谢, 米歇尔


Tags: 文件命令cmakeconfigbin链接标志lib
1条回答
网友
1楼 · 发布于 2024-10-06 12:35:43

我发现我的错误是尝试手动操作。CMake可以为我做得更好:

find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
message("PYTHONLIBS_VERSION_STRING: ${PYTHONLIBS_VERSION_STRING}")

不幸的是它找到了3.5,而我需要2.7

相关问题 更多 >