我想为库实现一个类似于此处提到的命名方案: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
有没有直接的方法来做到这一点?
编辑: 这可以稍后在项目中使用这样的库很好地使用: Linking different libraries for Debug and Release builds in Cmake on windows?
编辑:我在从输出中删除 Debug 和 Release 文件夹时遇到问题,可以通过以下答案解决:How to not add Release or Debug to output path?
最佳答案
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用于查找此类库:优先使用导入的目标,而不是 target_link_libraries
的粗粒度遗留 debug
和 optimized
限定符。 Config file packages提供一种将此类导入的目标公开给您的客户的便捷方式,它们还会自动为您处理任何后缀恶作剧。
关于c++ - cmake:为静态库的调试构建添加 "d"后缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49672264/