conan.tools.apple.fix_apple_shared_install_name()

fix_apple_shared_install_name(conanfile)

此工具会在 conanfile 的 `package_folder` 中搜索所有 `dylib` 文件,并使用 macOS 中可用的 `install_name_tool` 工具修复这些文件中的 `LC_ID_DYLIB` 和 `LC_LOAD_DYLIB` 字段,以设置 `@rpath`。

此工具会在 conanfile 的 `package_folder` 中搜索所有 `dylib` 文件,并修复库的安装名称(即 `LC_ID_DYLIB` 头)。包文件夹中的库和可执行文件也会更新其 `LC_LOAD_DYLIB` 字段,以反映修补后的安装名称。包内的可执行文件还将获得一个 `LC_RPATH` 条目,指向包文件夹中库的相对位置。这通过使用 macOS 中可用的 `install_name_tool` 工具完成,详情如下:

  • 对于 `LC_ID_DYLIB`,这是包含库安装名称的字段,它会将安装名称更改为使用 `@rpath` 的名称。例如,如果安装名称是 `/path/to/lib/libname.dylib`,则新的安装名称将是 `@rpath/libname.dylib`。这通过内部执行类似操作完成:

install_name_tool /path/to/lib/libname.dylib -id @rpath/libname.dylib
  • 对于 `LC_LOAD_DYLIB`,这是包含库依赖路径的字段,它会将依赖路径更改为使用 `@rpath` 的路径。例如,如果一个二进制文件依赖于 `/path/to/lib/dependency.dylib`,这将被更新为 `@rpath/dependency.dylib`。这适用于包文件夹中的库和可执行文件,通过如下方式调用 `install_name_tool` 完成:

install_name_tool /path/to/lib/libname.dylib -change /path/to/lib/dependency.dylib @rpath/dependency.dylib
  • 对于 `LC_RPATH`,在包中包含依赖于同一包内库的二进制可执行文件的情况下,将添加条目以反映库相对于可执行文件的位置。如果一个包在 `bin` 子文件夹中有可执行文件,在 `lib` 子文件夹中有库,这可以通过类似如下的调用来执行:

install_name_tool /path/to/bin/my_executable -add_rpath @executable_path/../lib

此工具通常适用于使用 Autotools 作为构建系统的 recipe,以及在打包的库中未修复正确安装名称的情况下。如果需要,请在 conanfile 的 `package()` 方法中使用此工具,例如:

from conan.tools.apple import fix_apple_shared_install_name

class HelloConan(ConanFile):

  ...

  def package(self):
      autotools = Autotools(self)
      autotools.install()
      fix_apple_shared_install_name(self)

conan.tools.apple.is_apple_os()

is_apple_os(conanfile, build_context=False)

如果操作系统是 Apple 系统(macOS, iOS, watchOS, tvOS 或 visionOS),则返回 True

conan.tools.apple.to_apple_arch()

to_apple_arch(conanfile, default=None)

将 Conan 风格的架构转换为 Apple 风格的架构

conan.tools.apple.XCRun()

XCRun(conanfile, sdk=None, use_settings_target=False)

XCRun 是 Apple `xcrun` 工具的包装器,用于获取构建信息。

参数:
  • conanfile – Conanfile 实例。

  • sdk – 当传入 `False` 时将跳过该标志,当传入 `None` 时将尝试自动调整 sdk。

  • use_settings_target – 如果 `settings_target` 存在,则尝试使用它们(默认为 `False`)。

find(tool)

查找 SDK 工具(例如 clang, ar, ranlib, lipo, codesign 等)

属性 sdk_path

获取 sdk 路径(又称 apple sysroot 或 -isysroot)

属性 sdk_version

获取 sdk 版本

属性 sdk_platform_path

获取 sdk 平台路径

属性 sdk_platform_version

获取 sdk 平台版本

属性 cc

C 编译器 (CC) 路径

属性 cxx

C++ 编译器 (CXX) 路径

属性 ar

归档器 (AR) 路径

属性 ranlib

归档索引器 (RANLIB) 路径

属性 strip

符号移除工具 (STRIP) 路径

属性 libtool

libtool 路径

属性 otool

otool 路径

属性 install_name_tool

install_name_tool 路径