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 могут опустить вышеупомянутые консервативные зависимости и создать более эффективные графы построения.
Кроме того, если выходной файл пользовательской команды является членом набора файлов типа 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 принципа deprecated by definition и может быть удалено в будущей версии CMake.
© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.31/policy/CMP0154.html