'MT_StaticRelease' 不匹配 'MD_DynamicRelease' 使用 cmake vcpkg

问题描述

我在 Windows 10 上遇到了 Cmake 的问题。 我正在使用 cmake 和 vcpkg 来构建一个链接到 Boost 线程的应用程序(实际上,我是在 Ubuntu 上开发的,现在我正在尝试为 Windows 构建它。)

我收到的问题是:

boost_thread-vc140-mt.lib (thread.obj):错误 LNK2038:不匹配 检测到“RuntimeLibrary”:值“MT_StaticRelease”没有 匹配 mtconnect_get_data.obj 中的值 'MDd_DynamicDebug'

这是我的 Cmake 文件

# CMakeLists.txt


cmake_minimum_required(VERSION 3.0)
project(mtconnect)


set(FULL_PATH_TO_MysqL_CONNECTOR_CPP_DIR "C:/Program Files/MysqL/Connector C++ 8.0")
include_directories(${FULL_PATH_TO_MysqL_CONNECTOR_CPP_DIR}/include/jdbc)
include_directories(${FULL_PATH_TO_MysqL_CONNECTOR_CPP_DIR}/include/jdbc/cppconn)
link_directories(${FULL_PATH_TO_MysqL_CONNECTOR_CPP_DIR}/lib64/vs14)

set(Boost_INCLUDE_DIR ${_VCPKG_INSTALLED_DIR}/x64-windows-static/include)

find_package(Boost required COMPONENTS thread)
include_directories(include ${Boost_INCLUDE_Dirs}) 

find_package(CURL CONfig required)
include_directories(${CURL_INCLUDE_Dirs})


set(FULL_PATH_TO_LIBCONfig_DIR my_libconfig_path)
include_directories(${FULL_PATH_TO_LIBCONfig_DIR}/include)
link_directories(${FULL_PATH_TO_LIBCONfig_DIR}/lib)
find_library(LIBCONfigPP_LOCATION libconfig++)

set(FULL_PATH_TO_PTHREAD_DIR my_pthread_path )
include_directories(${FULL_PATH_TO_PTHREAD_DIR}/include)
link_directories(${FULL_PATH_TO_PTHREAD_DIR}/lib/x64)


include_directories(include)

set(Boost_NO_SYstem_PATHS true)
set (Boost_USE_STATIC_LIBS OFF CACHE BOOL "use static libraries from Boost")
set (Boost_USE_MULTITHREADED ON)


if (WIN32)
  add_deFinitions( -DBOOST_ALL_NO_LIB )
  add_deFinitions( -DBOOST_ALL_DYN_LINK )
endif()

add_executable(mtconnect_create_data src/mtconnect_create_data.cpp)
add_executable(mtconnect_get_data src/mtconnect_get_data.cpp include/AsioTelnetClient.cpp)

target_link_libraries(mtconnect_create_data ${CURL_LIBRARY} ${Boost_LIBRARIES})
target_link_libraries(mtconnect_get_data ${CURL_LIBRARY} ${Boost_LIBRARIES}
    MysqLcppconn ${LIBCONfigPP_LOCATION} pthread)

解决方法

...在我看来可以通过添加来解决

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

就在 add_executable 行之前,只构建发布

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...