CMAKE_OSX_SYSROOT

指定要使用的 macOS 平台 SDK 的位置或名称。

如果未显式设置,则该值将由 SDKROOT 环境变量初始化(如果已设置)。否则,该值默认为空,并且编译器会自行选择默认的 macOS SDK。

版本 4.0 中已更改: 默认值现在为空。以前,默认值是根据 CMAKE_OSX_DEPLOYMENT_TARGET 或主机平台计算得出的。

为了通过编译器的 -isysroot 标志传递显式的 macOS SDK,用户可以使用 -DCMAKE_OSX_SYSROOT=macosx 配置其构建树,或者在环境中 export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"

注意事项

  • 位于 /usr/bin 的 macOS 编译器在未调用 -isysroot 时,会在系统 SDK 路径之前搜索 /usr/local/include 中的头文件,这与许多平台的约定一致。安装在 /usr/local 的 macOS-x86_64 主机上的 Homebrew 用户,在使用 Homebrew 工具构建时,应如上所述传递一个显式 SDK。

  • 某些 Clang 编译器没有默认的 macOS SDK 选择。对于这些编译器,如果 CMAKE_OSX_SYSROOT 为空,CMake 将自动传递 -isysroot,并使用 xcrun --show-sdk-path 打印的 macOS SDK。

此变量的值应在第一次调用 project()enable_language() 命令之前设置,因为它可能会影响工具链和标志的配置。它打算由创建构建树的用户本地设置。此变量应设置为 CACHE 条目(否则 CMake 可能会在初始化同名缓存条目时将其删除),除非策略 CMP0126 设置为 NEW

尽管变量名中包含 OSX,但它们也适用于 macOS 以外的其他 SDK,例如 iOS、tvOS、visionOS 或 watchOS。

此变量在非 Apple 平台上被忽略。