CMAKE_OSX_SYSROOT — CMake 4.3.0 Documentation

# CMAKE_OSX_SYSROOT

Specify the location or name of the macOS platform SDK to be used.

If not set explicitly, the value is initialized by the `SDKROOT` environment variable, if set. Otherwise, the value defaults to empty, and the compiler is expected to choose a default macOS SDK on its own.

Changed in version 4.0: The default is now empty. Previously a default was computed based on the `CMAKE_OSX_DEPLOYMENT_TARGET` or the host platform.

In order to pass an explicit macOS SDK via the compiler's `-isysroot` flag, users may configure their build tree with `-DCMAKE_OSX_SYSROOT=macosx`, or `export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"` in their environment.

Notes:

- macOS compilers in `/usr/bin`, when not invoked with `-isysroot`, search for headers in `/usr/local/include` before system SDK paths, matching the convention on many platforms. Users on macOS-x86_64 hosts with Homebrew installed in `/usr/local` should pass an explicit SDK, as described above, when not building with Homebrew tools.

- Some Clang compilers have no default macOS SDK selection. For these, if `CMAKE_OSX_SYSROOT` is empty, CMake will automatically pass `-isysroot` with the macOS SDK printed by `xcrun --show-sdk-path`.

The value of this variable should be set prior to the first `project()` or `enable_language()` command invocation because it may influence configuration of the toolchain and flags. It is intended to be set locally by the user creating a build tree. This variable should be set as a `CACHE` entry (or else CMake may remove it while initializing a cache entry of the same name) unless policy `CMP0126` is set to `NEW`.

Despite the `OSX` part in the variable name(s) they apply also to other SDKs than macOS like iOS, tvOS, visionOS, or watchOS.

This variable is ignored on platforms other than Apple.