CMake设置MSVC工程MT/MTd/MD/MDd

本文详细介绍了如何在MSVC工程中通过CMakeLists.txt设置CMAKE_POLICY CMP0091以管理MT/MD运行库标志,并使用set_property设置MSVC_RUNTIME_LIBRARY属性,解决混合使用MT/MD库导致的LNK2038错误。


0. 前言

MSVC工程上右键->属性,找到配置属性->C/C++->代码生成->运行库,会发现有好几种选项:MT MTd MD MDd
在这里插入图片描述
这是对于多线程程序生成对象链接内容的控制。

先理解一下这四个有什么不同:

  1. 首先后面带d表示Debug,生成对象(exe、lib都行)是带有调试信息的,生成对象占用空间相比不带d的会更大一些;
  2. MTMD区别:前者是静态链接,将有关依赖库都打包进生成对象了,所以占用空间更大;后者是动态链接,运行时依赖电脑环境,容易出现换个电脑报错dll的现象。

这个出问题常见于依赖某个lib文件时,弹出LNK2038错误:
在这里插入图片描述
一般因为VS工程默认是MD/MDd,即动态链接方式,而一些库在生成时采用的是MT/MTd方式(如GoogleTest

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值