cmake:为静态库的调试版本添加“d”后缀

时间:2018-04-05 12:20:24

标签: c++ visual-studio cmake

我想为库提供类似于此处提到的库的命名方案:Library name for x32 vs x64

设置CMakeLists.txt文件以创建静态库

add_library(test test.h test.cpp)

从cmake列表创建visual studio解决方案后,项目的设置方式是将调试库test.lib写入/x64/Debug/test.lib,并将发布版本写入/x64/Release/test.lib。我更愿意将它们写入/lib/,但在调试版本中添加“d”。想法是

/lib/test.lib
/lib/testd.lib

如果可能的话,还有64位版本的附加后缀

/lib/test.lib
/lib/test64.lib
/lib/testd.lib
/lib/test64d.lib

有直接的方法吗?

编辑: 这可以在项目中使用这样的libs很好地使用: Linking different libraries for Debug and Release builds in Cmake on windows?

编辑:我在输出中删除Debug和Release文件夹时遇到问题,可以通过以下答案修复:How to not add Release or Debug to output path?

1 个答案:

答案 0 :(得分:5)

CMAKE_DEBUG_POSTFIX用于为调试库附加d

set(CMAKE_DEBUG_POSTFIX d)

如果您不想全局设置,您也可以在选定的库中使用DEBUG_POSTFIX目标属性。

没有用于区分32/64位构建的相应功能,但由于无法在相同的CMake配置中混合这两种,因此您可以轻松地手动区分这些情况,例如。

if(CMAKE_SIZEOF_VOID_P EQUAL 4)
    set(ARCH_POSTFIX "")
else()
    set(ARCH_POSTFIX 64)
endif()

add_library(my_lib${ARCH_POSTFIX} [...])

或者,如果要在不同的体系结构上使用相同的目标名称,请设置类似CMAKE_STATIC_LIBRARY_SUFFIX的变量(存在大量的变量,因此您可以为目标类型选择正确的变量并基于要在哪个输出文件后附加一个后缀。

由于您还提到this answer来查找此类库:首选使用导入的目标,而不是debug的粗粒度遗留optimizedtarget_link_libraries限定符。 Config file packages提供了一种方便的方式将这些导入的目标暴露给您的客户,并且他们还会自动为您处理任何后缀恶作剧。