如何将现有CMake构建类型的所有参数复制到自定义构建类型?
在CMake 3.8+中复制现有构建类型设置到自定义类型
你可以直接复用现有构建类型(比如Release)的所有编译、链接标志,无需手动逐个复制,具体实现如下:
步骤1:添加自定义构建类型并更新缓存
首先将自定义的Deploy类型加入可用配置列表,并写入CMake缓存(确保VS、Xcode这类多配置生成器能识别):
# 添加Deploy构建类型到配置列表 set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES};Deploy" CACHE STRING "可用构建配置" FORCE) message("生成的配置类型: ${CMAKE_CONFIGURATION_TYPES}")
步骤2:复制现有构建类型的所有标志
以复制Release类型的设置为例,将对应编译、链接标志变量直接赋值给Deploy的变量:
# 复制Release的C编译标志到Deploy set(CMAKE_C_FLAGS_DEPLOY "${CMAKE_C_FLAGS_RELEASE}" CACHE STRING "Deploy构建类型的C编译标志" FORCE) # 复制Release的C++编译标志到Deploy set(CMAKE_CXX_FLAGS_DEPLOY "${CMAKE_CXX_FLAGS_RELEASE}" CACHE STRING "Deploy构建类型的C++编译标志" FORCE) # 复制链接器标志(覆盖可执行文件、共享库、静态库、模块等场景) set(CMAKE_EXE_LINKER_FLAGS_DEPLOY "${CMAKE_EXE_LINKER_FLAGS_RELEASE}" CACHE STRING "Deploy构建类型的可执行文件链接标志" FORCE) set(CMAKE_SHARED_LINKER_FLAGS_DEPLOY "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}" CACHE STRING "Deploy构建类型的共享库链接标志" FORCE) set(CMAKE_STATIC_LINKER_FLAGS_DEPLOY "${CMAKE_STATIC_LINKER_FLAGS_RELEASE}" CACHE STRING "Deploy构建类型的静态库链接标志" FORCE) set(CMAKE_MODULE_LINKER_FLAGS_DEPLOY "${CMAKE_MODULE_LINKER_FLAGS_RELEASE}" CACHE STRING "Deploy构建类型的模块链接标志" FORCE)
说明
- 使用
CACHE ... FORCE是为了确保这些变量被写入CMake缓存,避免后续配置过程中被覆盖 - 如果你想复制其他构建类型(如Debug)的设置,只需把上述代码中的
RELEASE替换为DEBUG即可 - 这种方式会完整复用目标构建类型的所有标志,不会遗漏任何编译、链接相关配置
内容的提问来源于stack exchange,提问作者AndrewBloom
相关产品推荐
相关产品推荐

