Spec-Zone.ru › CMake 3.28

cmake-cxxmodules(7)

Новое в версии 3.28.

C++ 20 ввел в язык концепцию «модулей». Конструкция требует от систем сборки упорядочивать компиляции друг относительно друга, чтобы надёжно удовлетворить import заявления. Реализация CMake запрашивает у компилятора сканирование исходных файлов на предмет зависимостей модулей во время сборки, собирает результаты сканирования, чтобы вывести ограничения по порядку, и сообщает инструменту сборки, как динамически обновлять граф сборки.

Управление сканированием

Сканируются ли исходные файлы на предмет использования C++ модулей, зависит от следующих запросов. Используется первый запрос, дающий ответ «да» или «нет».

  • Если исходный файл принадлежит набору файлов типа CXX_MODULES, он будет отсканирован.
  • Если целевой объект не использует по крайней мере C++ 20, он не будет отсканирован.
  • Если исходный файл не является языком CXX, он не будет отсканирован.
  • Если свойство исходного файла CXX_SCAN_FOR_MODULES задано, будет использовано его значение.
  • Если свойство целевого объекта CXX_SCAN_FOR_MODULES задано, будет использовано его значение. Установите переменную CMAKE_CXX_SCAN_FOR_MODULES, чтобы инициализировать это свойство для всех целевых объектов при их создании.
  • В противном случае исходный файл будет отсканирован, если компилятор и генератор поддерживают сканирование. См. политику CMP0155.

Обратите внимание, что любой отсканированный исходный файл будет исключён из любой сборки unity (см. UNITY_BUILD), так как операторы, связанные с модулями, могут находиться только в одном месте внутри единицы перевода C++.

Поддержка компиляторов

Компиляторы, которые CMake изначально поддерживают сканирование зависимостей модулей, включают:

  • Набор инструментов MSVC 14.34 и новее (предоставляется Visual Studio 17.4 и новее)
  • LLVM/Clang 16.0 и новее
  • GCC 14 (для развиваемой ветки, после 2023-09-20) и новее

Поддержка генераторов

Список генераторов, которые поддерживают сканирование исходных файлов на предмет C++ модулей, включает:

  • Ninja
  • Ninja Multi-Config
  • Visual Studio 17 2022

Ограничения

Существует ряд известных ограничений текущей поддержки C++ модулей в CMake. Здесь не документированы известные ограничения или ошибки компиляторов, так как они могут со временем меняться.

Для всех генераторов:

  • Модули заголовков не поддерживаются.
  • Нет встроенной поддержки import std; или других модулей, предоставляемых компилятором.

Для генераторов Ninja:

  • Требуется ninja 1.11 или новее.

Для генераторов Visual Studio:

  • Только Visual Studio 2022 и наборы инструментов MSVC 14.34 (Visual Studio 17.4) и новее.
  • Отсутствует поддержка экспорта или установки BMI или информации о модулях.
  • Отсутствует поддержка компиляции BMI из IMPORTED целевых объектов с C++ модулями.
  • Отсутствует диагностика использования модулей, предоставляемых PRIVATE исходными файлами, из PUBLIC модульных исходных файлов.

© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.28/manual/cmake-cxxmodules.7.html

Spec-Zone.ru

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