XcodeToolchain

XcodeToolchain 是 Xcode 的工具链生成器。它将生成 .xcconfig 配置文件,这些文件可以添加到 Xcode 项目中。此生成器将当前的包配置、设置和选项转换为 Xcode .xcconfig 文件的语法。

XcodeToolchain 生成器可以在 conanfiles 中按名称使用

conanfile.py
class Pkg(ConanFile):
    generators = "XcodeToolchain"
conanfile.txt
[generators]
XcodeToolchain

它也可以在 conanfile 的 generate() 方法中完全实例化

from conan import ConanFile
from conan.tools.apple import XcodeToolchain

class App(ConanFile):
    settings = "os", "arch", "compiler", "build_type"

    def generate(self):
        tc = XcodeToolchain(self)
        tc.generate()

XcodeToolchain 生成器在 conan install 命令后将生成三个文件。如 XcodeDeps 生成器部分所述,不同的配置将创建一个具有不同名称的文件集。例如,首先运行 conan install 进行 Release 配置,然后进行 Debug 配置

$ conan install conanfile.py # default is Release
$ conan install conanfile.py -s build_type=Debug

将创建以下文件

.
├── conan_config.xcconfig
├── conantoolchain_release_x86_64.xcconfig
├── conantoolchain_debug_x86_64.xcconfig
├── conantoolchain.xcconfig
└── conan_global_flags.xcconfig

这些文件是

  • 主要的 conan_config.xcconfig 文件,将被添加到项目中。它包含此生成器生成的文件以及 XcodeDeps 生成的文件(如果也已设置)。

  • conantoolchain_<debug/release>_x86_64.xcconfig:声明 CLANG_CXX_LIBRARYCLANG_CXX_LANGUAGE_STANDARDMACOSX_DEPLOYMENT_TARGET(当 os 设置为 Macos 时)变量,这些变量具有基于构建配置、架构和 SDK 的条件逻辑。

  • conantoolchain.xcconfig:聚合了为不同已安装配置生成的全部 conantoolchain_<config>_<arch>.xcconfig 文件。

  • conan_global_flags.xcconfig:只有在设置了与编译器或链接器标志相关的任何配置变量时,才会生成此文件。有关更多详细信息,请查看下面的 配置部分

每次使用不同配置调用 conan install 都会创建一个新的 conantoolchain_<config>_<arch>.xcconfig 文件,该文件聚合在 conantoolchain.xcconfig 中,因此您可以将不同的配置包含在 Xcode 项目中。

XcodeToolchain 文件可以根据 Conan 设置值声明以下 Xcode 构建设置

  • *_DEPLOYMENT_TARGET 基于 os + os.version 设置,并将使构建系统传递相应的标志(例如,MACOSX_DEPLOYMENT_TARGET 转换为 macOS 的 -mmacosx-version-min)及其值(如果已设置)。它定义了二进制文件应运行的最低操作系统版本。

  • CLANG_CXX_LANGUAGE_STANDARD 基于 compiler.cppstd 设置,该设置设置 C++ 语言标准。

  • CLANG_CXX_LIBRARY 基于 compiler.libcxx 设置,并设置要使用的 C++ 标准库的版本。

使用工具链的优点之一是,它们可以帮助实现与本地开发流程完全相同的构建,就像在缓存中创建包时一样。

conf

此工具链也受这些 [conf] 变量影响

  • tools.build:cxxflags C++ 标志列表。

  • tools.build:cflags 纯 C 标志列表。

  • tools.build:sharedlinkflags 在创建共享库时将使用的链接器标志列表。

  • tools.build:exelinkflags 在创建可执行文件时将使用的链接器标志列表。

  • tools.build:defines 预处理器定义列表。

如果您设置了这些变量中的任何一个,工具链将使用它们生成 conan_global_flags.xcconfig 文件,该文件将从 conan_config.xcconfig 文件中包含。