cmake - 使用CMake使用/MT而不是/MD进行编译

标签 cmake

我在 Windows 上使用 CMake 以及 Windows SDK 和 NMake Makefile。

默认情况下,它使用 /MD 编译器开关进行编译。

如何将其更改为使用 /MT 开关进行编译?

最佳答案

您可以修改 CMAKE_<LANG>_FLAGS_<CONFIG> 变量:

set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")

如果您的 CMake 标志已包含 /MD ,您可以确保上述命令在/MD之后执行。被插入(后来添加 /MT 会覆盖冲突的现有选项),或者您可以从头开始设置标志:

set(CMAKE_CXX_FLAGS_RELEASE "/MT")
set(CMAKE_CXX_FLAGS_DEBUG "/MTd")

或者,您可以替换现有的 /MD/MDd值为 /MT/MTd分别通过执行以下操作:

set(CompilerFlags
        CMAKE_CXX_FLAGS
        CMAKE_CXX_FLAGS_DEBUG
        CMAKE_CXX_FLAGS_RELEASE
        CMAKE_C_FLAGS
        CMAKE_C_FLAGS_DEBUG
        CMAKE_C_FLAGS_RELEASE
        )
foreach(CompilerFlag ${CompilerFlags})
  string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
endforeach()

关于cmake - 使用CMake使用/MT而不是/MD进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14172856/

相关文章:

c++ - CMake-附件.h : No such file or directory

cmake - 为什么 `cmake --verbose=1` 给出详细的 cmake 输出而 `cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON` 没有?

ubuntu - Cmake 在 Ubuntu 20.04 上找不到 ZLIB

objective-c - OSX 弃用警告 CMake

CMake install TARGETS 给定的目标不是可执行文件、库或模块

c++ - -cmake 中的框架命令行选项

cmake - 在代理后面的 CMake 中获取依赖项

regex - 从 CMake 中的 REGEX REPLACE 中排除包含特定字符串的行

opengl - 尝试构建支持 OpenGL 的 OpenCV 2.4.1

cmake - 查找由于 cmake 项目中的源更改而受影响的所有目标