某些 CMake 内置模块,例如 FindPythonLibs
,设置一些将包含库列表的变量,以便您拥有一组用于调试和发布构建的库。当您打印其中一个时,它看起来像 optimized;C:\foo\python27.lib;debug;C:\foo\python27_d.lib
现在,至少在 Windows 上,只有一个版本的 python 可以链接 - 与您的构建配置匹配的版本。如果您正在构建调试,则必须链接到调试 python,对于发布也是如此。因此,当只有一个值相关时,处理这些多个值对我来说毫无意义。所以我有两个问题:
CMAKE_BUILD_TYPE
选择正确的字符串? ? CMAKE_BUILD_TYPE=Debug
,我需要字符串 C:\foo\python27_d.lib
所以我可以在我的脚本中用它做其他事情。 通常如何解决这个问题?
最佳答案
如果您查看 syntax对于 target_link_libraries
你会看到你传递了额外的参数来指示库的优化或调试版本。
需要注意的是 CMake 的语法使得做 foo(A;B;C)
相当于 foo(A B C)
.
所以你根本不需要解析字符串; CMake 的有趣语法为您处理它:CMake 扩展变量值,然后将其扩展为单独的参数到 target_link_libraries
:
target_link_libraries(mytarget ${PythonLibs_LIBRARIES})
扩展到
target_link_libraries(mytarget optimized;C:\foo\python27.lib;debug;C:\foo\python27_d.lib)
扩展到
target_link_libraries(mytarget optimized C:\foo\python27.lib debug C:\foo\python27_d.lib)
我认为要复制文件,您可以使用以下内容:
add_custom_command(TARGET mytarget POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy C:\foo\python27_d.dll $<TARGET_FILE_DIR:mytarget>)
我仍然不确定如何获取目标所依赖的库的路径。
关于cmake - 您如何在 CMake 中解析优化/调试库字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28687909/