[C++][MSVC][Error] 检测到“RuntimeLibrary”的不匹配项_ 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”

1 简介

该错误仅在Windows的MSVC编译器下会出现

2 VisualStudio环境

在MSVC工程上右键->属性,找到配置属性->C/C+±>代码生成->运行库,如下图
image.png
这四个参数的区别如下:

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

2 CMake环境

参考 CMake设置MSVC工程MT/MTd/MD/MDd_cmake mtd-CSDN博客 的方案来解决这个问题

# 设置策略CMP0091为NEW,新策略
if (POLICY CMP0091)
  cmake_policy(SET CMP0091 NEW)
endif (POLICY CMP0091)

# 声明一个工程
project(TestpyTest)

# 添加一个exe
add_executable(test test.cpp)

# 设置MT/MTd
set_property(TARGET test PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")

需要注意的有以下几点:

  • cmake_policy 这个步骤一定要放在 声明project 之前。
  • MSVC_RUNTIME_LIBRARY的取值可以替换为以下几个:
    • MultiThreaded :对应MT
    • MultiThreadedDLL :对应MD
    • MultiThreadedDebug:对应MTd
    • MultiThreadedDebugDLL:对应MDd

3 参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值