QT之error: LNK2038: 检测到“RuntimeLibrary”的不匹配项
静态编译了个QT5.15.16的库,结果按照老方法无法正常使用,报错
Qt5Widgets.lib(qtabwidget.obj):-1: error: LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”(mocs_compilation.cpp.obj 中)
查阅了挺多资料,尝试许久,发现解决方式如下:
在项目的cmakelist里增加如下内容
# 判断是否使用 MSVC 编译器
if(MSVC)
# 设置策略CMP0091为NEW,新策略
if (POLICY CMP0091)
cmake_policy(SET CMP0091 NEW)
endif (POLICY CMP0091)
# 设置MT/MTd
set_property(TARGET Qt_static_third PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
一定要用上面这种。
下面这种没用。
# 判断是否使用 MSVC 编译器
if(MSVC)
# 获取当前的构建类型
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
# 调试模式下添加 /MTd 标志
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
# 发布模式下添加 /MT 标志
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
endif()
endif()