gpt4 book ai didi

cmake - 避免在 Conan 配置文件和 CMake 之间重复配置

转载 作者:行者123 更新时间:2023-12-03 08:27:52 27 4
gpt4 key购买 nike

我一直在为个人项目学习柯南,但我有一个问题,通过查看文档和示例无法回答。

Conan 的“配置文件”和 CMake 之间似乎缺乏交互,很尴尬。我的意思是:有许多不同的构建参数必须手动保持同步 - 使用与 conan install 期间选择的参数不同的参数运行 CMake。将导致构建错误。

举一个更具体的例子,这是我的两个配置以及我将如何使用它们来构建:

$ cat ~/.conan/profiles/gcc_debug
[settings]
os=Linux
os_build=Linux
arch=x86_64
arch_build=x86_64
compiler=gcc
compiler.version=10
compiler.libcxx=libstdc++11
build_type=Debug
[options]
[build_requires]
[env]

$ export CC=/usr/bin/gcc
$ export CXX=/usr/bin/g++
$ conan install ../src --profile gcc_debug
$ cmake ../src -GNinja -DCMAKE_BUILD_TYPE=Debug
$ cmake --build .
$ cat ~/.conan/profiles/clang_cl_release
[settings]
os=Windows
os_build=Windows
arch=x86_64
arch_build=x86_64
compiler=Visual Studio
compiler.version=16
compiler.toolset=ClangCL
build_type=Release
[options]
[build_requires]
[env]

$ conan install ../src --profile clang_cl_release
$ cmake ../src -G"Visual Studio 16 2019" -TClangCL
$ cmake --build . --config=Release

在第一个示例中,我必须重复 gccDebug .
在第二个中,我必须重复Visual Studio , 16 , ClangCL ,和Release .

必须重复自己这么多次感觉很糟糕,特别是当这些选项分布在多个长时间运行的命令中时,并且忘记一个选项可能会导致不明显的错误消息。我觉得很奇怪的是,当您调用 cmake_basic_setup() 时,Conan 不仅仅强制(覆盖)适当的 CMake 变量。 ;它已经知道它期望的值是什么,如果它们不匹配就会爆炸。

处理这个问题的推荐方法是什么?

最佳答案

通常,您会使用 Conan 设置所有外部库,然后从 CMake 使用它们。但是,您可以采取相反的方法:让 CMake 调用 Conan 来安装外部依赖项。

示例代码来自 How to launch conan install from cmake :

cmake_minimum_required(VERSION 2.8)
project(myproject CXX)

# Download automatically, you can also just copy the conan.cmake file
if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake")
message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan")
file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/master/conan.cmake"
"${CMAKE_BINARY_DIR}/conan.cmake")
endif()

include(${CMAKE_BINARY_DIR}/conan.cmake)

conan_cmake_run(REQUIRES Catch2/2.6.0@catchorg/stable
BASIC_SETUP)

add_executable(main main.cpp)
target_link_libraries(main ${CONAN_LIBS})

关于cmake - 避免在 Conan 配置文件和 CMake 之间重复配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66131530/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com