XcodeDeps¶
XcodeDeps
工具是为 Xcode 生成依赖信息的工具。它会生成多个 .xcconfig 配置文件,供使用 xcodebuild 或 Xcode 的使用者使用。要使用它们,只需将生成的配置文件添加到 Xcode 项目,或从命令行设置 -xcconfig
参数。
XcodeDeps
生成器可以在 conanfile 中通过名称使用
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 项目中,只需为您要使用的所有配置(通常是 *Debug* 和 *Release*)添加 *conan_config.xcconfig* 配置文件。
定义的其他变量¶
除了定义上述 *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.2.11"
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 中切换到此配置时,构建系统将根据我们是否要链接共享库或静态库来获取正确的值。