柯南构建混合了发布和调试
Conan build mixes release and debug
我尝试在windows下构建一个简单的cmake应用程序。该应用程序依赖于gtest,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]
链接:警告LNK4098:defaultlib"MSVCRT"与其他库的使用冲突;使用/NODEFAULTLIB:库[T:\project\build\cocpp19.vcxproj]
正如错误消息所示,发布版本和调试版本是混合的。conan安装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"
- 用于自定义调试构建的 CMake qt 输入库后缀
- GCC:在调试构建中优化的静态数据成员
- BOOST :: MUTEX版本与调试构建
- MS Visual C 释放和调试构建之间的不同行为的可能原因
- STD ::复制在调试构建中失败
- 获得MAC地址的代码似乎会损坏内存,但仅在发布构建中而不是调试构建
- 错误LNK2019:未解决的外部符号-MSVC调试构建功能模板
- 在Windows 10上使用MINGW构建的Clang的调试构建无法运行
- Windows 10 UWP桌面桥应用程序(C ):调试构建中的VCLIBS依赖关系
- 预编译HEADERS在使用Qt Creator/qmake/MinGw的调试构建中不起作用
- 调试构建C++ "delete"慢
- 调试构建和发布构建、区别和用途是什么意思
- QCreator:如何创建调试构建配置
- 如何使用调试构建 libwebsockets(即 -g 以便我可以使用 gdb)?(我在libwebsockets函数上遇到段错误,ssl_ctrl() )
- 如何将静态发布库链接到调试构建中
- Visual Studio -严格调试构建
- 调试构建hello world崩溃,取决于优化水平
- 编写一个makefile以在调试构建中使用-D_GLIBCXX_DEBUG
- 在调试构建中,数据突然变为NULL
- GCC c++ 11调试构建,发布失败