代码之家  ›  专栏  ›  技术社区  ›  mans

在cmake中设置mtd

  •  0
  • mans  · 技术社区  · 1 年前

    我遇到了与中所述完全相同的问题 this question ,但具有不同的配置:

    我通过VCPKG宣言模式使用OpenCV,cmake如下:

    
    cmake_minimum_required(VERSION 3.10)
    
    File(TO_CMAKE_PATH $ENV{VCPKG_ROOT} VCPKG_ROOT)
    message(STATUS ${VCPKG_ROOT})
    set(CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "")
    set(VCPKG_TARGET_TRIPLET "x64-windows-static-ffmpeg" CACHE STRING "")
    
    project(test_project)
    
    
    find_package(OpenCV REQUIRED)
    
    set(INCLUDE_DIR "src/include")  # Change this if your library directory has a different path
    include_directories(${INCLUDE_DIR})
    
    # Set C++ standard to 20
    set(CMAKE_CXX_STANDARD 20)
    
    file(GLOB SRC_FILES "src/*.cpp" "src/*.c" )  # You can change "*.cpp" to "*.c" if your project uses C
    file(GLOB INCLUDE_FILES  "${INCLUDE_DIR}/*.h" "${INCLUDE_DIR}/*.hpp") 
    
    # Add an executable (replace "main.cpp" with your actual source file)
    add_executable(test_program ${SRC_FILES} ${INCLUDE_FILES})
    set_target_properties(test_program PROPERTIES
            MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
            )
    # Include directories for header files
    target_link_libraries(test_program ${OpenCV_LIBS})
    

    vcpkg是:

    {
        "version": "1.0.0",
        "dependencies": [
            "opencv[core]"
        ]
    }
    

    并且它正在生成此错误:

    mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in main.obj  test_program opencv_core4d.lib(matrix.cpp.obj)      
    

    我还测试了这个版本的cmake,但它不起作用:

    cmake_minimum_required(VERSION 3.10)
    
    File(TO_CMAKE_PATH $ENV{VCPKG_ROOT} VCPKG_ROOT)
    message(STATUS ${VCPKG_ROOT})
    set(CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "")
    set(VCPKG_TARGET_TRIPLET "x64-windows-static-ffmpeg" CACHE STRING "")
    
    project(test_project)
    
    
    find_package(OpenCV REQUIRED)
    
    set(INCLUDE_DIR "src/include")  # Change this if your library directory has a different path
    include_directories(${INCLUDE_DIR})
    
    # Set C++ standard to 20
    set(CMAKE_CXX_STANDARD 20)
    
    file(GLOB SRC_FILES "src/*.cpp" "src/*.c" )  # You can change "*.cpp" to "*.c" if your project uses C
    file(GLOB INCLUDE_FILES  "${INCLUDE_DIR}/*.h" "${INCLUDE_DIR}/*.hpp") 
    
    # Add an executable (replace "main.cpp" with your actual source file)
    add_executable(test_program ${SRC_FILES} ${INCLUDE_FILES})
    set_property(TARGET test_program PROPERTY
                 MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
    # Include directories for header files
    target_link_libraries(test_program ${OpenCV_LIBS})
    
    

    每次运行make时,我都会删除构建目录,以确保不会缓存任何内容,并且项目生成始终从头开始。

    我该怎么解决这个问题?

    1 回复  |  直到 1 年前
        1
  •  0
  •   Tsyvarev    1 年前

    所有物 MSVC_RUNTIME_LIBRARY 仅出现在CMake中 3.15 。在以前的CMake版本中,它被忽略。

    你需要更新你的 cmake_minimum_required 命令

    cmake_minimum_required(VERSION 3.15)
    

    更确切地说,在您的代码中,由于策略的原因,该属性被忽略 CMP0091 ,当所需的CMake版本为3.14或更低时,将其设置为OLD。

    但通常情况下,如果在CMake版本中引入一些功能 V ,则为了使用此功能,代码应指定最小CMake版本等于 五、 或更新。