如何在VS2019中激活CMakeSettings.json变量

时间:2020-11-09 19:49:34

标签: visual-c++ cmake visual-studio-2019 microsoft-runtime-library

我第一次尝试在VS2019中使用CMake,并且对其工作方式感到困惑。 这是在Windows 10中使用msvc_x64_x64工具集的。

我有一个CMake项目,该项目创建一个静态库,我想使用动态链接。 默认的CMakeSettings.json包含变量

CMAKE_CXX_FLAGS_DEBUG = / MDd / Zi / Ob0 / Od / RTC1

CMakeLists.txt不会覆盖它,因此对我来说看起来不错。

但是,生成的lib文件似乎使用静态链接,另一个项目可以使用运行时库/ MTd而不是/ MDd链接到它。

因此,似乎是从其他位置获取了编译器标志,而忽略了CMakeSettings.json中的标志,或者除了CMAKE_CXX_FLAGS_DEBUG之外还有一些变量。

如何使用CMakeSettings.json变量?

这是当前的CMakeSettings.json文件

{
  "configurations": [
    {
      "name": "x64-Debug",
      "generator": "Visual Studio 16 2019 Win64",
      "configurationType": "Debug",
      "inheritEnvironments": [ "msvc_x64_x64" ],
      "buildRoot": "${projectDir}\\out\\build\\${name}",
      "installRoot": "${projectDir}\\out\\install\\${name}",
      "cmakeCommandArgs": "",
      "buildCommandArgs": "",
      "ctestCommandArgs": "",
      "variables": [
        {
          "name": "CMAKE_CXX_FLAGS_DEBUG",
          "value": "/MDd /Zi /Ob0 /Od /RTC1",
          "type": "STRING"
        }
      ]
    },
    {
      "name": "x64-Release",
      "generator": "Ninja",
      "configurationType": "RelWithDebInfo",
      "buildRoot": "${projectDir}\\out\\build\\${name}",
      "installRoot": "${projectDir}\\out\\install\\${name}",
      "cmakeCommandArgs": "",
      "buildCommandArgs": "",
      "ctestCommandArgs": "",
      "inheritEnvironments": [ "msvc_x64_x64" ],
      "variables": []
    }
  ]
}

1 个答案:

答案 0 :(得分:0)

找到了!

该库包含来自GoogleTest的文件,并且有一个internal_utils.cmake文件包含该行

        string(REPLACE "/MD" "-MT" ${flag_var} "${${flag_var}}")

因此,在使用CMakeSettings.json变量之前,它们已经被覆盖。

添加CMake命令参数

-Dgtest_force_shared_crt=ON

说服它停止了。

感谢您的帮助。