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(), чтобы установить её в OLD или NEW явно. В отличие от многих принципов, CMake версии 3.28.6 не выводит предупреждение, когда этот принцип не установлен, и просто использует поведение 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.28/policy/CMP0154.html