![](/img/trans.png)
[英]Do Conan Debug and Release Build_Types have Different Package Dependencies?
[英]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.