我第一次尝试在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": []
}
]
}
答案 0 :(得分:0)
找到了!
该库包含来自GoogleTest的文件,并且有一个internal_utils.cmake文件包含该行
string(REPLACE "/MD" "-MT" ${flag_var} "${${flag_var}}")
因此,在使用CMakeSettings.json变量之前,它们已经被覆盖。
添加CMake命令参数
-Dgtest_force_shared_crt=ON
说服它停止了。
感谢您的帮助。