Visual Studio 2017+CMake+Ninja生成器以/MT编译库的配置问题
如何在VS2017+CMake+Ninja下通过CMakeSettings.json配置/MT编译(不修改CMakeLists.txt)
刚好碰到过类似的场景,给你分享一下具体操作步骤,全程不用硬编码编译选项到CMakeLists.txt里:
1. 找到或生成CMakeSettings.json文件
打开你的CMake项目后,在VS的解决方案资源管理器里找CMakeSettings.json——如果没有的话,右键点击项目根目录,选择「CMake Settings for [你的项目名]」,VS会自动生成这个配置文件并打开它。
2. 针对每个配置添加/MT编译参数
CMakeSettings.json里会列出你常用的配置(比如x86-Debug、x64-Release),你需要给每个配置的cmakeCommandArgs字段添加对应的编译选项:
- Debug模式:用
/MTd(多线程静态链接Debug版CRT),需要设置CMAKE_CXX_FLAGS_DEBUG和CMAKE_C_FLAGS_DEBUG - Release模式:用
/MT(多线程静态链接Release版CRT),对应设置CMAKE_CXX_FLAGS_RELEASE和CMAKE_C_FLAGS_RELEASE
举个x86-Debug配置的修改示例:
{ "name": "x86-Debug", "generator": "Ninja", "configurationType": "Debug", "inheritEnvironments": [ "msvc_x86" ], "buildRoot": "${projectDir}\\out\\build\\${name}", "installRoot": "${projectDir}\\out\\install\\${name}", "cmakeCommandArgs": "-DCMAKE_CXX_FLAGS_DEBUG=\"/MTd\" -DCMAKE_C_FLAGS_DEBUG=\"/MTd\"", "buildCommandArgs": "", "ctestCommandArgs": "" }
再看x64-Release的配置修改:
{ "name": "x64-Release", "generator": "Ninja", "configurationType": "Release", "inheritEnvironments": [ "msvc_x64" ], "buildRoot": "${projectDir}\\out\\build\\${name}", "installRoot": "${projectDir}\\out\\install\\${name}", "cmakeCommandArgs": "-DCMAKE_CXX_FLAGS_RELEASE=\"/MT\" -DCMAKE_C_FLAGS_RELEASE=\"/MT\"", "buildCommandArgs": "", "ctestCommandArgs": "" }
3. 重新配置并构建
修改完保存文件后,在VS顶部菜单栏点击「CMake」→「Configure All」,让CMake重新读取配置参数。之后再执行构建,你的库就会用/MT(或/MTd)模式编译了。
这种方式的好处是完全把编译配置和CMakeLists.txt解耦,不用在项目构建脚本里硬编码平台相关的编译选项,也方便切换不同的CRT链接模式。
内容的提问来源于stack exchange,提问作者wxShayan
相关产品推荐
相关产品推荐

