conanfile.py、conanfile.txt、conanprofile 和 settings.yml 之间有什么区别?

Far*_*ahi 9 c++ cmake cl conan

我已经尝试为我的项目构建柯南包一周了。我一直在阅读文档,但有很多地方我仍然感到困惑。

我认为有4个文件非常重要:

  • 柯南文件.py
  • 柯南文件.txt
  • 柯南档案
  • 设置.yml

每个文件的用途是什么?每个文件应该位于哪里?哪些是可以互换的?

我有以下conanfile.py生成柯南包的内容:

from conans import ConanFile, CMake

class mylibConan(ConanFile):
    name = "mylib"
    version = "1.16.0"
    generators = "cmake"
    settings = "os", "arch", "compiler", "build_type"
    options = {"shared": [True, False]}
    default_options = "shared=False"
    exports_sources = ["*"]
    url = ""
    license = ""
    description = "The mylib HAL library."

    def configure(self):
        self.options.shared = False

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

    def package(self):
        libs_build_dir = "lib_mylib/" + str(self.settings.build_type)
        api_dir = "modules/mylib/lib/api/"
        self.copy(pattern="lib_mylib.lib", dst="lib", src=libs_build_dir)
        self.copy(pattern="*", dst="include", src=api_dir)

    def package_info(self):
        self.cpp_info.includedirs = ['include']
        self.cpp_info.libdirs = ['lib']
        self.cpp_info.libs = ['mylib']
Run Code Online (Sandbox Code Playgroud)

conanfile.txt...以及我使用 Conan 包的主项目中的以下内容:

[requires]
mylib/1.16.0@demo/testing

[generators]
cmake
visual_studio_multi
Run Code Online (Sandbox Code Playgroud)

我需要定义cl版本,14.24.28314以便它不会与使用的项目冲突。

我应该在哪里定义cl版本?

dro*_*dri 13

这些文件是:

  • conanfile.py是柯南的“食谱”。它声明依赖关系,以及如何从源构建包。相同的配方可用于管理不同的配置,例如不同的平台、编译器、构建类型等
  • conanfile.txt是 的文本简化版conanfile.py,可专门用于使用依赖项,但不能用于创建包。conanfile.py既可用于消耗依赖项又可用于创建包
  • 文件是包含配置值(如和 )profile的文本文件。您可以在命令行中传递这些值,但最好将它们放在文件中,更易于管理且更方便。os=Windowscompiler=gcc
  • settings.yml是可以采用什么值的声明settings。验证输入并确保没有拼写错误,并使用一组通用的配置,以便人们可以一起协作。

我建议遵循文档中的教程,例如https://docs.conan.io/en/latest/getting_started.html,或者如果您喜欢视频格式,这个免费培训很好:https://academy.jfrog .com/path/柯南

关于版本,您需要使用设置中定义的版本,因为Visual Studio您需要使用1415等。新的msvc编译器设置,实验性的,将使用编译器版本,例如19.xx。一般来说,不需要指定到补丁的编译器版本,因为这主要针对二进制模型,并且通常不需要达到该级别。如果您想了解如何自定义设置值,请阅读本节