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



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

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

CMAKE_CXX_FLAG_DEBUG=/MDd/Zi/Ob0/Od/RTC1

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": []
}
]
}

找到了!

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

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

因此,CMakeSettings.json变量在使用之前就被覆盖了。

添加CMake命令参数

-Dgtest_force_shared_crt=ON

说服它停止。

谢谢你的帮助。

请注意,在VS2019中,正确的方法是使用CMakePresets.json。不推荐使用CMakeSettings.json。要启用对它们的支持,需要启用一个选项。查看此链接https://learn.microsoft.com/en-us/cpp/build/cmake-presets-vs?view=msvc-160了解更多信息。

最新更新