【问题标题】:Conan build mixes release and debug柯南构建混合发布和调试
【发布时间】:2022-01-03 00:56:54
【问题描述】:

我尝试在 windows 下构建一个简单的 cmake 应用程序。该应用程序依赖于 gtest,它是通过 conan 安装的。项目的基本设置如下:

conanfile.txt

[requires]
gtest/1.11.0

[generators]
cmake_find_package
cmake_paths
cmake

CMakeLists.txt

project(conan-myapp)
cmake_minimum_required(VERSION 3.1)
include(${CMAKE_BINARY_DIR}/conan_paths.cmake)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup(TARGETS)

find_package(GTest REQUIRED)

enable_testing()
include_directories(${GTest_INCLUDE_DIR})

add_executable(myapp "main.cpp")
target_link_libraries(myapp GTest::gtest_main GTest::gtest )
add_test(myapp bin/myapp)

main.cpp

#include <gtest/gtest.h>

TEST(mytest, testit) {
    EXPECT_TRUE(false);
}

我使用以下命令来构建应用程序:

mkdir build
cd build 
conan install ..
cmake ..
cmake --build .

但我收到以下错误消息

gtest.lib(gtest-all.obj):错误 LNK2038:检测到不匹配 '_ITERATOR_DEBUG_LEVEL':值 '0' 与 main.obj 中的值 '2' 不匹配 [T:\project\build\cocpp19.vcxproj]

gtest.lib(gtest-all.obj):错误 LNK2038:检测到“RuntimeLibrary”不匹配:值 'MD_DynamicRelease' 与 main.obj 中的值 'MDd_DynamicDebug' 不匹配 [T:\project\build\cocpp19.vcxproj]

gtest_main.lib(gtest_main.obj):错误 LNK2038:检测到“_ITERATOR_DEBUG_LEVEL”不匹配:值“0”与 main.obj 中的值“2”不匹配 [T:\project\build\cocpp19.vcxproj]

gtest_main.lib(gtest_main.obj):错误 LNK2038:检测到“RuntimeLibrary”不匹配:> 值 'MD_DynamicRelease' 与 main.obj 中的值 'MDd_DynamicDebug' 不匹配 [T:\project\build\cocpp19.vcxproj]

LINK : 警告 LNK4098: defaultlib 'MSVCRT' 与使用其他库冲突;使用 /NODEFAULTLIB:library [T:\project\build\cocpp19.vcxproj]

【问题讨论】:

    标签: c++ conan


    【解决方案1】:

    正如错误消息所示,发布版本和调试版本之间存在混合。柯南安装了 gtest 的发行版。该项目是作为调试构建的。为避免这种混合,请指定构建类型,即调试以下命令有效

    conan install .. -s build_type=Debug
    cmake .. -DCMAKE_BUILD_TYPE=Debug
    cmake --build .
    

    你可以使用发布版

    conan install .. -s build_type=Release
    cmake .. -DCMAKE_BUILD_TYPE=Release
    cmake --build .
    

    【讨论】:

    • 正确!默认情况下,Conan 构建 Release,但 Cmake 构建 Debug。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2018-02-04
    相关资源
    最近更新 更多