前言
本篇文章介绍如何在CMake中设置MSVC运行库,对应VS属性界面的选项如下:
注意:
对于非windows系统,该值将被忽略,所以我们设置该值的时候可以不用考虑平台相关
MSVC_RUNTIME_LIBRARY
这是一个变量,该变量就是用于设置MSVC运行库的值的,可以设置的值如下:
- MultiThreaded:对应于VS的
/MT
,多线程静态链接运行库 - MultiThreadedDLL:对应于VS的
/MD
,多线程动态链接运行库 - MultiThreadedDebug:对应于VS的
/MTd
,多线程静态链接运行库的Debug模式 - MultiThreadedDebugDLL:对应于VS的
/MDd
,多线程动态链接运行库的Debug模式
设置的语法规则如下:
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
重点是$<$<CONFIG:Debug>:Debug>
这一部分,这一部分的意思是如果当前是Debug模式,返回Debug,否则返回空,所以设置指令对应的VS选项如下:
- /MT和/MTd:
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
- /Md和/MDd:
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
默认值
注意,如果没有进行设置,该选项的默认值是MultiThreaded$<$<CONFIG:Debug>:Debug>DLL
使用场景
整个解决方案
可以在写完cmake_minimum_required和project之后马上设置MSVC运行库,这样会影响所有的生成目标:
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
针对单个项目
在单个项目的CMakeLists中设置
set_target_properties(Target PROPERTIES
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
)