CMP0215 — CMake 4.4.0 Documentation

# CMP0215

Added in version 4.4.

Ninja Generators emit Swift modules separately from compilation.

In CMake 4.3 and below, Swift targets built by Ninja Generators emit `.swiftmodule` from the Swift compile edge together with object files. Because Ninja treats a build edge as atomic, downstream Swift targets must wait for compilation outputs to finish before they can use the module interface.

CMake 4.4 and above prefer to emit `.swiftmodule` from a dedicated `-emit-module` build edge so that downstream Swift targets can begin compiling as soon as the module interface is available. This policy provides compatibility with projects that have not been updated.

The `OLD` behavior for this policy is to not emit modules separately. The `NEW` behavior for this policy is to emit `.swiftmodule` from a dedicated build edge for importable Swift targets by default.

The `Swift_SEPARATE_MODULE_EMISSION` target property and corresponding `CMAKE_Swift_SEPARATE_MODULE_EMISSION` variable may be set to enable or disable the behavior on a per-target basis.

Note

Separate module emission takes effect only when policy `CMP0157` is set to `NEW` prior to the first `project()` or `enable_language()` command that enables the Swift language. The dedicated `.swiftmodule` edge is available only in the split Swift build model.

This policy was introduced in CMake version 4.4. It may be set by `cmake_policy()` or `cmake_minimum_required()`. If it is not set, CMake does not warn, and uses `OLD` behavior.

Note

The `OLD` behavior of a policy is deprecated by definition and may be removed in a future version of CMake.