Conan v1.24 在依赖关系图中区分了构建上下文和主机上下文 (在 “交叉构建” 部分中了解有关主机和构建平台的含义的更多信息) 当用户使用 — profile:build和 — profile: 主机参数向命令行提供两个配置文件时:

    • 主机上下文使用根包 (在conan install或conan create命令中指定的包) 填充,其所有要求和构建要求强制在主机上下文中。
    • 构建上下文包含其余的构建要求以及配置文件中的所有这些要求。此类别通常包括所有开发工具,如CMake、编译器、链接器…

    配方中声明的构建要求可以强制保留在主机上下文中,这是测试将链接到生成的库或我们要部署到主机平台的其他可执行文件的库所需要的,例如:

    1. build_requires = "nasm/2.14" # 'build' context (nasm.exe will be available)
    2. def build_requirements(self):
    3. self.build_requires("protobuf/3.6.1") # 'build' context (protoc.exe will be available)
    4. self.build_requires("gtest/0.1", force_host_context=True) # 'host' context (our library will link with it)

    构建和主机上下文 - 图1
    考虑到相同的包 (可执行文件或库) 可以在图中、主机中和构建上下文中出现两次,并且具有不同的包id。柯南将向消费者传播适当的信息:

    • 主机上下文中的构建需求将像任何其他需求一样传播:
      • Cpp_info: 所有信息将在deps_cpp_info [“xxx”] 对象中可用。
      • Env_info: 不会传播。
      • User_info: 将使用deps_user_info[“xxx”] 对象提供。
    • 构建上下文中的构建要求将传播所有env_info,Conan还将使用来自cpp_info对象的相应信息填充环境变量DYLD_LIBRARY_PATH、LD_LIBRARY_PATH和PATH。所有这些信息将在deps_env_info对象中可用。user_info属性中声明的自定义信息将在消费者conanfile中的user_info_build[“xxx”] 对象中可用。