Spec-Zone.ru › CMake 3.30

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

Spec-Zone.ru

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