You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:52:55