CMake生成Visual Studio项目时<ClCompile>未添加指定编译选项咨询
MSVC编译选项未显示在vcxproj的AdditionalOptions中的原因分析
问题场景
有一个空的main.cpp文件,搭配如下CMakeLists.txt配置:
cmake_minimum_required(VERSION 3.0) project(test) if (MSVC) add_compile_options(/W4 /WX /JMC /OptionDoesNotExist) endif() add_executable(main main.cpp)
执行cmake .生成Visual Studio 17 2022项目后,查看main.vcxproj片段发现只有/OptionDoesNotExist被列在<AdditionalOptions>中,/W4、/WX、/JMC这些有效选项不见踪影。
根本原因
CMake针对MSVC的常用编译选项做了属性映射处理,不会直接把这类选项写入<AdditionalOptions>,而是转换为Visual Studio项目文件的专属属性节点:
/W4对应项目属性里的<WarningLevel>,值设为Level4/WX对应<TreatWarningAsError>,值设为true/JMC对应<JustMyCode>,值设为true
这些选项已经通过原生属性的方式生效,只是不在<AdditionalOptions>里显示。而/OptionDoesNotExist是CMake无法识别的无效选项,没有对应的VS项目属性,所以被直接追加到<AdditionalOptions>中。
验证方式
打开生成的main.vcxproj文件,在对应配置(比如Debug|x64)的<ItemDefinitionGroup>节点下,能找到这些转换后的属性:
<WarningLevel>Level4</WarningLevel> <TreatWarningAsError>true</TreatWarningAsError> <JustMyCode>true</JustMyCode>
内容的提问来源于stack exchange,提问作者yeputons
相关产品推荐
相关产品推荐

