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

6pp0gazn  于 2022-11-11  发布在  其他
关注(0)|答案(4)|浏览(278)

我一直在学习柯南的一个个人项目,我有一个问题,我一直无法回答从看文件和例子。
柯南的“个人资料”和CMake之间似乎有一个尴尬的互动缺失,我的意思是:有许多不同的构建参数必须手动保持同步-使用与在conan install期间选择的参数不同的参数运行CMake将导致构建错误。
为了给予一个更具体的例子,这里有我的两个配置,以及我将如何使用它们来构建:
第一个
在第一个例子中,我必须重复gccDebug
在第二个示例中,我必须重复Visual Studio16ClangCLRelease
不得不重复这么多次让人感觉很不舒服,尤其是当这些选项分散在多个长时间运行的命令中时,忘记一个选项可能会导致不明显的错误消息。它已经知道它需要什么值,如果它们不匹配,它就会崩溃。
处理此问题的建议方法是什么?

l7mqbcuq

l7mqbcuq1#

通常你会使用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})
9rnv2umw

9rnv2umw2#

请参阅建议的柯南用法:https://github.com/conan-io/cmake-conan

set(CONAN_PROFILE_NAME ${CMAKE_SYSTEM_NAME}-${CMAKE_GENERATOR})
execute_process(COMMAND ${CONAN_CMD} profile new ${CONAN_PROFILE_NAME} --detect ERROR_QUIET)
conan_cmake_autodetect(settings)

# REPEAT THIS FOR EACH OF YOUR REMOTES

conan_cmake_configure(REQUIRES zlib/1.2.0 GENERATORS cmake_find_package)
conan_cmake_install(PATH_OR_REFERENCE .
                BUILD missing
                REMOTE conancenter
                PROFILE ${CONAN_PROFILE_NAME}
                SETTINGS ${settings})

find_package(zlib)
waxmsbnn

waxmsbnn3#

编辑:这是柯南v1.X

让Conan在它的构建函数中处理所有血淋淋的细节:
conanfile.py

generators = "cmake"
...

def build(self):
    cmake = CMake(self)
    cmake.configure()
    cmake.build()

...

CMakeLists.txt

cmake_minmum_required(VERSION 3.13)
project(my_project)

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
set(CONAN_SYSTEM_INCLUDES ON) # Hide GCC/Clang warnings in third-party libs
conan_basic_setup(TARGETS)    # TARGETS enables Modern CMake targets for deps

add_executable(${PROJECT_NAME} main.cpp)
conan_target_link_libraries(${PROJECT_NAME})

终点站:

$ conan install -if build/Release . # Add -pr <profile> here
$ conan build -bf build/Release .

另外,您不必每次都手动导出GCC,将其放在配置文件的[env]部分下:

[env]
CC=/usr/bin/gcc

您可以使用相同的方式指定预设产生器:

[env]
CONAN_CMAKE_GENERATOR=Ninja Multi-Config
gwo2fgha

gwo2fgha4#

我刚开始研究conan build,它看起来很有前途。我一开始跳过它是因为它看起来只适用于发布Conan软件包的人,但现在我认为它也适用于消费者。事实上,这个页面甚至明确提到了我的问题陈述:
conan build将使用conan install中使用的设置,这些设置已缓存在本地conaninfo.txt和您的build文件夹中的文件中。这简化了过程并减少了已安装包与当前项目配置之间的不匹配错误。[...]实现和使用conanfile.py build()方法可确保我们始终使用相同的设置无论是在需求的安装还是项目的构建过程中,都是如此,并且简化了对构建系统的调用。

相关问题