2010-02-05 82 views

回答

70

按照CMake documentation

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) 
+12

我做这一切的时候,更加紧凑的一行: target_link_libraries(MyEXE调试3PDebugLib优化3PReleaseLib) – 2010-02-08 21:37:42

+8

如果库名称是什么一样的,但是你想Visual Studio来寻找它在不同的路径?即我想链接mylib.lib,但我有两个版本的编译。一个位于/path/Debug/mylib.lib下,另一个位于/path/Release/mylib.lib下(有些库经常出现这种情况)。那你怎么办呢? – Jubei 2012-04-27 04:52:07

+1

@Jubei定义2个变量。每个图书馆一个。 – Qsiris 2013-03-20 17:06:30

4

不知从@Mike Willekes的回答得到了CMake的同一个目标发布和调试链接给我:(

:和这样做的每一个库,需要链接 - 我只在一条线,设置两个配置由@sakra in a related question的建议得到了这个工作
+0

阿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

+0

缺点是,@SteveLorimer是在多配置生成器中 - 比如Visual Studio--它不会像生成时那样工作。 – Tarc 2016-11-03 16:29:12

+0

不知道我明白吗?我们不在调试版本中链接tcmalloc。我们在发布版本中链接tcmalloc。也就是说,没有tcmalloc的调试版本,所以在优化下列出它只会导致它被链接到调试版本中 – 2016-11-03 16:30:47

相关问题