Spec-Zone.ru › CMake 3.29

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.29/policy/CMP0154.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API