Spec-Zone.ru › CMake

VERIFY_PRIVATE_HEADER_SETS

Добавлено в версии 4.3.

Изменено в версии 4.4: теперь поддерживаются языки OBJC и OBJCXX в дополнение к C и CXX.

Используется для проверки того, что все заголовки из наборов заголовков PUBLIC и PRIVATE цели можно подключать отдельно.

Изменено в версии 4.4: Ранее цель проверки создавалась, только если в цели был хотя бы один подходящий заголовок. Теперь она всегда создаётся, если свойство включено.

Если этому свойству задано значение true, а цель является объектной библиотекой, статической библиотекой, динамической библиотекой, библиотекой модулей, интерфейсной библиотекой или исполняемым файлом, создаётся цель объектной библиотеки с именем <target_name>_verify_private_header_sets. Эта цель проверки содержит по одному исходному файлу для каждого заголовка из наборов заголовков PUBLIC и PRIVATE цели. Каждый исходный файл включает только соответствующий ему файл заголовка. Если у цели нет подходящих наборов заголовков, вместо этого создаётся вспомогательная цель, чтобы имя цели всегда существовало для зависимостей системы сборки.

Свойства, влияющие на компиляцию, копируются из исходной цели в цель проверки, чтобы компилятор интерпретировал заголовки так же, как при компиляции исходных файлов исходной цели. У такого подхода есть некоторые ограничения. Он не может воспроизвести те же условия, если какое-либо из этих свойств или свойств, унаследованных через требования сборки транзитивных зависимостей, содержит генераторные выражения, зависящие от цели, в которых не указана цель для подстановки. Такие выражения могут подставлять разное содержимое в зависимости от цели, для которой они используются.

Для цели проверки заданы значения true для свойств EXCLUDE_FROM_ALL и DISABLE_PRECOMPILE_HEADERS, а значения false — для свойств AUTOMOC, AUTORCC, AUTOUIC, UNITY_BUILD и CXX_SCAN_FOR_MODULES.

Если задано свойство заголовка LANGUAGE, его значение используется для определения языка компиляции файла заголовка. Поддерживаются языки C, CXX, OBJC и OBJCXX. Если язык не входит в этот список, файл заголовка не компилируется.

В противном случае язык определяется по исходным файлам цели в следующем порядке приоритета: OBJCXX имеет наивысший приоритет; если присутствуют исходные файлы CXX и OBJC, заголовок компилируется как OBJCXX; в противном случае CXX имеет приоритет над OBJC, а OBJC — над C. Если подходящие исходные файлы не найдены, тот же порядок приоритета применяется к глобально включённым языкам. Если поддерживаемый язык не найден, файл заголовка не компилируется.

Если для свойства заголовка SKIP_LINTING задано значение true, файл не компилируется.

Если для VERIFY_PRIVATE_HEADER_SETS и VERIFY_INTERFACE_HEADER_SETS задано значение true, заголовки из наборов файлов PUBLIC будут проверены дважды, но при разных условиях. Флаги компилятора, используемые для приватного и интерфейсного контекстов, могут различаться, что может привести к разной интерпретации содержимого заголовка компилятором.

Создаётся цель верхнего уровня с именем all_verify_private_header_sets, зависящая от всех целей приватной проверки. Также создаётся цель all_verify_header_sets, зависящая от all_verify_private_header_sets и, если она существует, от all_verify_interface_header_sets (см. VERIFY_INTERFACE_HEADER_SETS).

Начальное значение этого свойства задаётся значением переменной CMAKE_VERIFY_PRIVATE_HEADER_SETS, если она установлена при создании цели.

Если проекту необходимо указать, какие наборы заголовков проверяются этим свойством, можно задать свойство PRIVATE_HEADER_SETS_TO_VERIFY.

© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/prop_tgt/VERIFY_PRIVATE_HEADER_SETS.html

Spec-Zone.ru

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