CMake 用 /MTd 覆盖我的 /MDd 标志

cod*_*ddy 6 msbuild compilation build cmake

我在 stackoverflow 上读过类似的问题,但没有一个答案能解决我的问题。

我需要使用/MDd标志进行编译,这是我的 CMake 命令:(注意粗体/MDd标志)

cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=C:/temp -DCMAKE_C_FLAGS="-Zi -W4 -WX- -Od -Oy- -D_WIN32 -DWIN32=1 -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -D_CRT_SECURE_NO_WARNINGS=1 -D_SCL_SECURE_NO_警告=1 -D_MBCS -GF- -Gm -EHsc -RTCc -RTC1 -MDd -GS -Gy- -Qpar- -fp:精确 -fp:除了 -Zc:wchar_t -Zc:forScope -GR -Gd -analyze- -errorReport :迅速的”

这是执行nmake时的输出:

cl : Command line warning D9025 : overriding '/MDd' with '/MTd'
cl : Command line warning D9025 : overriding '/W4' with '/W3'
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我我在这里做错了什么吗?

Fra*_*ser 7

您可能会发现 CMakeLists.txt 中的某处有类似以下内容的内容:

set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /W3 /MTd")
Run Code Online (Sandbox Code Playgroud)

CMake 将构建特定的CMAKE_C_FLAGS_DEBUG标志附加到 General CMAKE_C_FLAGS,因此最终传递给编译器的标志列表包含:

... /MDd ... /MTd ...... /W4 ... /W3 ...

最右边的值会覆盖之前的值并生成警告。要解决此问题,您只需修改 CMakeLists.txt 以不应用这些不正确的标志。

该变量CMAKE_C_FLAGS在 CMakeLists.txt 中被操作的可能性较小,但您也可以随时检查这一点。