繁体   English   中英

在发布模式下无法在CMake中用/ MT替换/ MD

[英]Replacing /MD with /MT in CMake is not possible in Release mode

我有一个C ++库,我想使用Visual Studio 2017(CMake / Ninja)和发布模式下的/ MT编译器选项来编译它。 在这里 ,我前段时间也问过类似的问题。 该问题的答案有所帮助,但导致编译器抱怨(报告警告)有关用/ MT覆盖/ MD的信息。 然后,我使用了此解决方案 ,但是设置CMAKE_CXX_FLAGS_RELEASE对发布模式下的编译器命令行参数无效。 我的意思是以下代码在“调试”模式下运行良好:

set(CompilerFlags
    CMAKE_CXX_FLAGS
    CMAKE_CXX_FLAGS_DEBUG
    CMAKE_CXX_FLAGS_RELEASE)
foreach(CompilerFlag ${CompilerFlags})
    message("before replace: " ${${CompilerFlag}})
    string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
    message("after replace: " ${${CompilerFlag}})
endforeach()

运行CMake的结果将是:

before replace: /DWIN32 /D_WINDOWS /W3 /GR /EHsc
after replace: /DWIN32 /D_WINDOWS /W3 /GR /EHsc
before replace: /MDd /Zi /Ob0 /Od /RTC1
after replace: /MTd /Zi /Ob0 /Od /RTC1
before replace: /MD /O2 /Ob2 /DNDEBUG
after replace: /MT /O2 /Ob2 /DNDEBUG

构建的结果将是:

cl.exe  ... /MTd ...

在发布模式下,运行CMake的结果将相同。 但是,构建的结果将是:

cl.exe  ... /MD ...

如果您知道这样做的正确方法,我将不胜感激。

经过长时间的努力

TARGET_COMPILE_OPTIONS(${library_name} PRIVATE "/MT$<$<CONFIG:Release>:>")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM