gct*_*gct 50 c++ windows cmake
所以我有一个我正在编译的库,我需要链接不同的第三方内容,具体取决于它是调试版还是发布版(特别是那些库的发行版或调试版).在Cmake有一个简单的方法吗?
编辑:我应该注意我正在使用visual studio
Mik*_*kes 82
根据CMake文档:
target_link_libraries(<target> [lib1 [lib2 [...]]] [[debug|optimized|general] <lib>] ...)
Run Code Online (Sandbox Code Playgroud)
"debug","optimized"或"general"关键字表示紧随其后的库仅用于相应的构建配置.
所以你应该能够做到这一点:
add_executable( MyEXE ${SOURCES})
target_link_libraries( MyEXE debug 3PDebugLib)
target_link_libraries( MyEXE optimized 3PReleaseLib)
Run Code Online (Sandbox Code Playgroud)
Tar*_*arc 13
不知怎的,来自@Mike Willekes的答案让CMake链接在同一个目标中,对我来说都是释放和调试 :(
我只是通过在一行中设置两个配置来实现这一点,正如@sakra 在一个相关问题中所建议的那样- 并且每个需要链接的库都这样做:
target_link_libraries ( app
debug ${Boost_FILESYSTEM_LIBRARY_DEBUG}
optimized ${Boost_FILESYSTEM_LIBRARY_RELEASE} )
target_link_libraries ( app
debug ${Boost_LOG_LIBRARY_DEBUG}
optimized ${Boost_LOG_LIBRARY_RELEASE} )
target_link_libraries ( app
debug ${Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG}
optimized ${Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE} )
# ...
Run Code Online (Sandbox Code Playgroud)
我想在以前的答案中添加一些注释。
如果您需要创建要链接的多个文件的列表并将其存储在缓存变量中,那么您需要在每个库之前添加optimized或debug指定。这对于较大的生成文件/项目特别有用。
例如,您可以执行以下操作:
set( MyFavLib_LIBRARIES
debug debug/module1.lib optimized release/module1.lib
debug debug/module2.lib optimized release/module2.lib )
target_link_libraries( app ${MyFavLib_LIBRARIES} )
Run Code Online (Sandbox Code Playgroud)