CMP0097 — CMake 4.1.2 Documentation

# CMP0097

New in version 3.16.

`ExternalProject_Add()` with `GIT_SUBMODULES ""` initializes no submodules.

The commands provide a `GIT_SUBMODULES` option which controls what submodules to initialize and update. Starting with CMake 3.16, explicitly setting `GIT_SUBMODULES` to an empty string means no submodules will be initialized or updated.

This policy provides compatibility for projects that have not been updated to expect the new behavior.

The `OLD` behavior for this policy is for `GIT_SUBMODULES` when set to an empty string to initialize and update all git submodules. The `NEW` behavior for this policy is for `GIT_SUBMODULES` when set to an empty string to initialize and update no git submodules.

This policy was introduced in CMake version 3.16. 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

This policy also applies to `FetchContent_Declare()`, which uses the same download and update features as `ExternalProject_Add()`. However, due to an implementation deficiency present since the policy was first introduced, CMake 3.16 and later always uses the `NEW` behavior for `FetchContent_Declare()`, regardless of the policy setting. Formally, this forcing of `NEW` behavior for `FetchContent_Declare()` will continue to apply in future CMake releases.

Note

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