簡體   English   中英

柯南構建混合發布和調試

[英]Conan build mixes release and debug

我嘗試在 windows 下構建一個簡單的 cmake 應用程序。 該應用程序依賴於 gtest,它是通過 conan 安裝的。 項目的基本設置如下:

柯南文件.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)

主文件

#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 [T:\project\build\cocpp19.vcxproj] 中的值“2”不匹配

gtest.lib(gtest-all.obj):錯誤 LNK2038:檢測到“RuntimeLibrary”不匹配:值“MD_DynamicRelease”與 main.obj [T:\project\build\cocpp19.vcxproj] 中的值“MDd_DynamicDebug”不匹配

gtest_main.lib(gtest_main.obj):錯誤 LNK2038:檢測到“_ITERATOR_DEBUG_LEVEL”不匹配:值“0”與 main.obj [T:\project\build\cocpp19.vcxproj] 中的值“2”不匹配

gtest_main.lib(gtest_main.obj):錯誤 LNK2038:檢測到“RuntimeLibrary”不匹配:> 值“MD_DynamicRelease”與 main.obj [T:\project\build\cocpp19.vcxproj] 中的值“MDd_DynamicDebug”不匹配

鏈接:警告 LNK4098:defaultlib 'MSVCRT' 與其他庫的使用沖突; 使用 /NODEFAULTLIB:library [T:\project\build\cocpp19.vcxproj]

如錯誤消息所示,發布版本和調試版本之間存在混合。 柯南安裝了 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 .

我遇到了同樣的問題,事實證明罪魁禍首是我的conanfile.py中缺少設置聲明:

class MyProject(ConanFile):
    settings = "os", "arch", "compiler", "build_type"

添加后,構建類型會正確傳遞給 CMake,而無需手動指定。 它也適用於conan build

我不確定是否可以使用conanfile.txt來實現,但切換到conanfile.py很容易:

from conans import ConanFile
from conan.tools.cmake import CMake

class MyProject(ConanFile):
    name = "my_project"
    version = "0.1"
    settings = "os", "compiler", "build_type", "arch"
    requires = "gtest/1.11.0"
    generators = "cmake_find_package", "cmake_paths", "cmake"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM