柯南构建混合发布和调试
Posted
技术标签:
【中文标题】柯南构建混合发布和调试【英文标题】: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]
【问题讨论】:
【参考方案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。以上是关于柯南构建混合发布和调试的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Phonegap 和 Cordova 构建的混合应用程序上测试调试(Cpu 和 FPS)使用情况
8-4 Flutter Android混合开发实战-调试与发布
FlutterFlutter 混合开发 ( Dart 代码调试 | Flutter 单独调试 | 混合模式下 Flutter 调试 )