我第一次尝试了CMake在VS2019中,并且对它的工作方式感到困惑。这是在Windows 10中使用msvc_x64_x64工具集。
我有一个创建静态库的CMake项目,我想使用动态链接。默认的CMakeSettings.json包括变量
CMAKE_CXX_FLAGS_DEBUG = /MDd /Zi /Ob0 /Od /RTC1
The的CMakeLists.txt不覆盖这一点,所以在我看来很不错。
但是,生成的库文件似乎使用静态链接,另一个项目可以使用运行时库/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": []
}
]
}发布于 2020-11-10 18:12:52
找到了!
库包含来自GoogleTest的文件,并且有一个包含行的文件internal_utils.cmake
string(REPLACE "/MD" "-MT" ${flag_var} "${${flag_var}}")因此,在使用CMakeSettings.json变量之前,它们会被覆盖。
添加CMake命令参数
-Dgtest_force_shared_crt=ON说服它停下来。
谢谢你的帮助。
发布于 2022-09-08 15:31:56
注意,在VS2019中,正确的方法是使用CMakePresets.json。CMakeSettings.json被否决了。要启用对它们的支持,需要启用一个选项。有关更多信息,请参见此链接https://learn.microsoft.com/en-us/cpp/build/cmake-presets-vs?view=msvc-160。
https://stackoverflow.com/questions/64758336
复制相似问题