所以我有一个库正在编译,我需要链接不同的第三方东西,具体取决于它是调试还是发布版本(特别是这些库的发行版或调试版)。有没有一种简单的方法在Cmake中做到这一点?在Windows上的Cmake中链接不同的库以进行调试和发布?
编辑:我应该注意到我使用的Visual Studio
所以我有一个库正在编译,我需要链接不同的第三方东西,具体取决于它是调试还是发布版本(特别是这些库的发行版或调试版)。有没有一种简单的方法在Cmake中做到这一点?在Windows上的Cmake中链接不同的库以进行调试和发布?
编辑:我应该注意到我使用的Visual Studio
target_link_libraries(<target> [lib1 [lib2 [...]]] [[debug|optimized|general] <lib>] ...)
“调试”, “优化”,或 “一般” 关键字指示紧随其后的库 仅用于对应的构建 配置的 。
所以,你应该能够做到这一点:
add_executable(MyEXE ${SOURCES})
target_link_libraries(MyEXE debug 3PDebugLib)
target_link_libraries(MyEXE optimized 3PReleaseLib)
不知从@Mike Willekes的回答得到了CMake的同一个目标发布和调试链接给我:(
:和这样做的每一个库,需要链接 - 我只在一条线,设置两个配置由@sakra in a related question的建议得到了这个工作阿DEBUG_CONFIGURATIONS属性的添加都调试*和*发行库,这是发生了什么事给我!我们只想在发布模式下链接一个特定的库,所以你的方法不起作用。最后,我工作围绕它通过使用类似以下内容:'如果(CMAKE_BUILD_TYPE STREQUAL “释放”) \t target_link_libraries($ {ARG_NAME} \t \t \t $ {LIB_TCMALLOC} \t \t) \t ENDIF()' – 2016-11-02 14:58:36
缺点是,@SteveLorimer是在多配置生成器中 - 比如Visual Studio--它不会像生成时那样工作。 – Tarc 2016-11-03 16:29:12
不知道我明白吗?我们不在调试版本中链接tcmalloc。我们在发布版本中链接tcmalloc。也就是说,没有tcmalloc的调试版本,所以在优化下列出它只会导致它被链接到调试版本中 – 2016-11-03 16:30:47
我做这一切的时候,更加紧凑的一行: target_link_libraries(MyEXE调试3PDebugLib优化3PReleaseLib) – 2010-02-08 21:37:42
如果库名称是什么一样的,但是你想Visual Studio来寻找它在不同的路径?即我想链接mylib.lib,但我有两个版本的编译。一个位于/path/Debug/mylib.lib下,另一个位于/path/Release/mylib.lib下(有些库经常出现这种情况)。那你怎么办呢? – Jubei 2012-04-27 04:52:07
@Jubei定义2个变量。每个图书馆一个。 – Qsiris 2013-03-20 17:06:30