CMP0154
Добавлено в версии 3.28.
Сгенерированные файлы по умолчанию являются закрытыми в целях, использующих Наборы файлов.
CMake 3.27 и более ранние версии предполагают, что любой файл, сгенерированный как результат или побочный результат add_custom_command() или add_custom_target(), может быть публичным заголовочным файлом, предназначенным для включения в исходные файлы зависимых целей. Это требует, чтобы Генераторы Ninja добавляли консервативные зависимости только по порядку, которые не позволяют компилировать исходные файлы цели до завершения пользовательских команд зависимостей этой цели, даже если эти пользовательские команды создают исходные файлы, закрытые только для их собственной цели.
Наборы файлов, появившиеся в CMake 3.23, позволяют указать видимость сгенерированных заголовочных файлов. В CMake 3.28 и более поздних версиях предпочтительно считать, что в целях, использующих наборы файлов, сгенерированные файлы по умолчанию являются закрытыми для своей цели. Сгенерированные публичные заголовочные файлы необходимо указывать как элементы PUBLIC (или INTERFACE) FILE_SET, обычно типа HEADERS. Располагая этой информацией, Генераторы Ninja могут опускать упомянутые выше консервативные зависимости и создавать более эффективные графы сборки. Зависимые от таких целей также могут сокращать зависимости от них при использовании свойства цели OPTIMIZE_DEPENDENCIES.
Кроме того, если выходной файл пользовательской команды является элементом набора файлов типа CXX_MODULES, его также не требуется создавать до компиляции других исходных файлов той же цели. Поскольку эти файлы не должны включаться непосредственно во время компиляции, правила компиляции неявно не требуют их наличия.
Эта политика обеспечивает совместимость с проектами, использующими наборы файлов в целях со сгенерированными заголовочными файлами, которые ещё не были обновлены. Такие проекты следует обновить, чтобы сгенерированные публичные заголовочные файлы были указаны в наборе файлов. Например:
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/foo.h
...
)
target_sources(foo
PUBLIC FILE_SET HEADERS
BASE_DIRS ${CMAKE_CURRENT_BINARY_DIR}
FILES ${CMAKE_CURRENT_BINARY_DIR}/foo.h
)
Поведение OLD для этой политики предполагает, что сгенерированные файлы являются публичными даже в целях, использующих наборы файлов, а Генераторы Ninja создают консервативные графы сборки. Поведение NEW для этой политики предполагает, что сгенерированные файлы в целях, использующих наборы файлов, являются закрытыми, а Генераторы Ninja создают более эффективные графы сборки.
Эта политика появилась в версии CMake 3.28. Её можно установить с помощью cmake_policy() или cmake_minimum_required(). Если она не установлена, CMake не выдаёт предупреждение и использует поведение OLD.
Примечание
Поведение OLD политики по определению является устаревшим и может быть удалено в будущей версии CMake.
© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/policy/CMP0154.html