XcodeDeps¶
XcodeDeps 工具是 Xcode 的依赖信息生成器。它将生成多个 .xcconfig 配置文件,可供使用 xcodebuild 或 Xcode 的使用者使用。要使用它们,只需将生成的配置文件添加到 Xcode 项目,或从命令行设置 -xcconfig 参数。
XcodeDeps 生成器可以在 conanfiles 中按名称使用
class Pkg(ConanFile):
generators = "XcodeDeps"
[generators]
XcodeDeps
它也可以在 conanfile 的 generate() 方法中完全实例化
from conan import ConanFile
from conan.tools.apple import XcodeDeps
class Pkg(ConanFile):
settings = "os", "compiler", "arch", "build_type"
requires = "libpng/1.6.37@" # Note libpng has zlib as transitive dependency
def generate(self):
xcode = XcodeDeps(self)
xcode.generate()
当使用 XcodeDeps 生成器时,每次调用 conan install 都会为每个依赖项和配置生成多个配置文件。例如,对于上面的 conanfile.py
$ conan install conanfile.py # default is Release
$ conan install conanfile.py -s build_type=Debug
此生成器支持多配置。它将为每个需求的Debug/Release不同配置生成不同的文件。它还会生成一个单独的文件 (conandeps.xcconfig),聚合所有直接依赖项的文件 (在本例中仅为 libpng)。上述命令生成以下文件
.
├── conan_config.xcconfig
├── conan_libpng.xcconfig
├── conan_libpng_libpng.xcconfig
├── conan_libpng_libpng_debug_x86_64.xcconfig
├── conan_libpng_libpng_release_x86_64.xcconfig
├── conan_zlib.xcconfig
├── conan_zlib_zlib.xcconfig
├── conan_zlib_zlib_debug_x86_64.xcconfig
├── conan_zlib_zlib_release_x86_64.xcconfig
└── conandeps.xcconfig
第一次 conan install 使用默认的 Release 和 x86_64 配置生成
conan_libpng_libpng_release_x86_64.xcconfig:声明变量,并带有条件逻辑,仅在 Xcode 或通过命令行传递给 xcodebuild 的活动配置中考虑。
conan_libpng_libpng.xcconfig:包含 conan_libpng_libpng_release_x86_64.xcconfig 并声明以下 Xcode 构建设置:
SYSTEM_HEADER_SEARCH_PATHS、GCC_PREPROCESSOR_DEFINITIONS、OTHER_CFLAGS、OTHER_CPLUSPLUSFLAGS、FRAMEWORK_SEARCH_PATHS、LIBRARY_SEARCH_PATHS、OTHER_LDFLAGS。它还包含生成的xcconfig文件,用于传递依赖项 (在本例中为 conan_zlib_zlib.xcconfig)。conan_libpng.xcconfig:在这种情况下,它仅包含 conan_libpng_libpng.xcconfig,但如果所需的包具有组件,则此文件将包含包的所有组件。
对于图中的每个依赖项,将生成相同的 3 个文件。在本例中,由于 zlib 是 libpng 的依赖项,因此它将生成:conan_zlib_zlib_release_x86_64.xcconfig、conan_zlib_zlib.xcconfig 和 conan_zlib.xcconfig。
conandeps.xcconfig:配置文件,包括所有直接依赖项,在本例中,它仅包含
conan_libpng.xcconfig。主 conan_config.xcconfig 文件,将添加到项目中。包括此生成器生成的文件以及如果也设置了 XcodeToolchain 生成的文件。
第二个 conan install -s build_type=Debug 生成
conan_libpng_libpng_debug_x86_64.xcconfig:与 Debug 配置的下方变量相同。
conan_libpng_libpng.xcconfig:此文件已由上一个命令创建,现在已修改为添加对 conan_libpng_debug_x86_64.xcconfig 的包含。
conan_libpng.xcconfig:此文件将保持不变。
与上一个命令类似,对于图中的每个依赖项,将生成相同的 3 个文件。在本例中,由于 zlib 是 libpng 的依赖项,因此它将生成:conan_zlib_zlib_debug_x86_64.xcconfig、conan_zlib_zlib.xcconfig 和 conan_zlib.xcconfig。
conandeps.xcconfig:配置文件,包括所有直接依赖项,在本例中,它仅包含
conan_libpng.xcconfig。主 conan_config.xcconfig 文件,将添加到项目中。包括此生成器生成的文件以及如果也设置了 XcodeToolchain 生成的文件。
如果您想将这些依赖项添加到您的 Xcode 项目,只需将 conan_config.xcconfig 配置文件添加到您想要使用的所有配置 (通常是 Debug 和 Release) 即可。
定义的附加变量¶
除了定义上述 Xcode 构建设置的变量之外,还声明了其他可能对在您的 Xcode 项目中使用的有用的变量
PACKAGE_ROOT_<package_name>:设置为 package_folder 属性的位置。
组件支持¶
此生成器支持具有组件的包。这意味着
如果依赖项
package_info()在某些组件上声明cpp_info.requires,则生成的 .xcconfig 文件将仅包含对这些组件的包含。当前包
requires将完全依赖于所有组件。请记住,package_info()仅适用于使用者,而不适用于当前包。
自定义配置¶
如果您的 Xcode 项目定义了自定义配置,例如 ReleaseShared 或 MyCustomConfig,则可以在 XcodeDeps 生成器中定义它,以便不同的项目配置可以使用不同的依赖项集。假设我们当前的项目的构建方式是共享库,具有自定义配置 ReleaseShared,并且该包也使用 shared 选项控制此项
from conan import ConanFile
from conan.tools.apple import XcodeDeps
class Pkg(ConanFile):
settings = "os", "compiler", "arch", "build_type"
options = {"shared": [True, False]}
default_options = {"shared": False}
requires = "zlib/1.3.1"
def generate(self):
xcode = XcodeDeps(self)
# We assume that -o *:shared=True is used to install all shared deps too
if self.options.shared:
xcode.configuration = str(self.settings.build_type) + "Shared"
xcode.generate()
这将管理生成此自定义配置的新 .xcconfig 文件,并且当您在 IDE 中切换到此配置时,构建系统将根据我们是想要链接到共享库还是静态库来获取正确的值。