CMake实现静态库Debug版本添加'd'后缀的命名配置
解决CMake静态库统一输出目录并添加Debug后缀的方案
嘿,这事儿不难,我给你捋清楚怎么配置CMake就能实现你要的效果:
核心思路
我们需要做两件关键配置:一是给Debug版本的库文件名加上d后缀,二是让所有配置(Debug/Release)的库都输出到统一的/lib目录下。
具体配置步骤
1. 给Debug版本添加后缀
你可以选择全局设置(对所有目标生效)或者只针对当前静态库设置:
- 全局设置:在
add_library之前添加这行,所有Debug版本的目标都会自动加d后缀:set(CMAKE_DEBUG_POSTFIX "d") - 单个目标设置:如果只想让
test这个库加后缀,就在add_library之后添加:
这种方式更灵活,不会影响其他可能的库目标。set_target_properties(test PROPERTIES DEBUG_POSTFIX "d")
2. 设置统一的输出目录
针对Visual Studio这种多配置生成器,我们需要指定静态库的输出目录,避免默认的x64/Debug、x64/Release子目录结构:
# 设置静态库输出到项目二进制目录下的lib文件夹(推荐,不污染源码) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib") # 如果想输出到源码目录下的lib文件夹,用下面这行: # set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/lib")
完整的CMakeLists.txt示例
把这些配置整合起来,你的CMakeLists.txt会变成这样:
cmake_minimum_required(VERSION 3.10) project(MyTestProject) # 全局设置Debug后缀(可选,也可以用单个目标设置) set(CMAKE_DEBUG_POSTFIX "d") # 设置静态库统一输出目录 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib") # 创建静态库 add_library(test STATIC test.h test.cpp) # 如果用单个目标设置后缀,就替换上面的全局设置,用这行: # set_target_properties(test PROPERTIES DEBUG_POSTFIX "d")
效果验证
生成Visual Studio解决方案后,编译Debug版本会在build/lib(如果用二进制目录)下得到testd.lib,编译Release版本会得到test.lib,完全符合你的需求~
内容的提问来源于stack exchange,提问作者Beginner




