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_BUILD), так как инструкции, связанные с модулями, могут выполняться только в одном месте в пределах единого блока перевода C++.
Поддержка компиляторов
Компиляторы, которые CMake поддерживают для сканирования зависимостей модулей, включают:
- MSVC инструмент 14.34 и новее (предоставляется Visual Studio 17.4 и новее)
- LLVM/Clang 16.0 и новее
- GCC 14 (для ветки разработки, после 2023-09-20) и новее
Поддержка генераторов
Список генераторов, которые поддерживают сканирование исходных файлов на C++ модули, включает:
Ограничения
Существует ряд известных ограничений текущей поддержки C++ модулей в CMake. Это не документирует известные ограничения или ошибки в компиляторах, так как они могут изменяться со временем.
Для всех генераторов:
- Не поддерживаются единицы заголовков.
- Нет встроенной поддержки
import std;или других модулей, предоставляемых компилятором.
Для генераторов Ninja:
- Требуется версия
ninja1.11 или новее.
Для генераторов Visual Studio:
- Только Visual Studio 2022 и MSVC toolsets 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.29/manual/cmake-cxxmodules.7.html