无法设置CMake <config>变量:Linux下配置目录生成异常
关于$的核心说明
$set(CONFIG "DEBUG")或者set(<CONFIG> "DEBUG")完全无效——它的值是CMake在构建阶段根据当前选择的构建配置(Debug/Release等)自动填充的,不能手动赋值。
Windows下Visual Studio属于多配置生成器,支持同时生成Debug、Release等多种配置的工程文件,所以$-x64异常目录。
解决步骤
1. 配置阶段明确指定构建类型
在Linux下执行CMake配置时,通过-DCMAKE_BUILD_TYPE参数指定配置:
# 生成Debug配置 cmake .. -DCMAKE_BUILD_TYPE=Debug # 生成Release配置 cmake .. -DCMAKE_BUILD_TYPE=Release
指定后,$
2. 在CMakeLists中设置默认构建类型(可选)
为了避免忘记指定CMAKE_BUILD_TYPE,可以在根CMakeLists.txt开头添加以下代码,默认设置为Debug,并允许用户修改:
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "默认构建类型" FORCE) # 提供可选的配置选项 set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "RelWithDebInfo" "MinSizeRel") endif()
3. 适配多/单配置生成器的输出目录写法
原输出目录中的${CMAKE_VS_PLATFORM_NAME}是VS专属变量,Linux下无法识别,建议替换为通用的${CMAKE_SYSTEM_PROCESSOR}(会输出x86_64等架构信息),同时用生成器表达式兼容两种生成器:
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/$<IF:$<CONFIG>,$<CONFIG>,${CMAKE_BUILD_TYPE}>-${CMAKE_SYSTEM_PROCESSOR}/${PROJECT_NAME})
这个写法会自动判断:如果是多配置生成器(如VS),用$
内容的提问来源于stack exchange,提问作者Leinad den

