Spec-Zone.ru › CMake

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

Spec-Zone.ru

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