CMake用/ MTd覆盖my / MDd标志

时间:2014-08-14 10:26:38

标签: build compilation msbuild 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_WARNINGS = 1 -D_MBCS -GF- -Gm -EHsc -RTCc -RTC1 -MDd -GS -Gy- -Qpar- -fp:precise -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'

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

1 个答案:

答案 0 :(得分:3)

您可能会在CMakeLists.txt中的某处找到类似的内容:

set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /W3 /MTd")

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

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

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

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