Как проверить, все ли заголовки в проекте автономны с CMake?

Я хочу автоматически проверить, могут ли все заголовки в проекте быть построены самостоятельно. Это распространенный метод проверки того, включают ли заголовки все свои зависимости. К сожалению, я не мог найти, как это может быть достигнуто. Может быть, кто-то может помочь? Будучи новичком CMake, я не уверен, что смогу самостоятельно разработать решение.

Надеемся, что решение не потребует создания новых .cc файлы или запуск любых внешних скриптов.

4

Решение

Посмотрите на стандартные функции модуля CMake CheckCXXSourceCompiles а также CheckCSourceCompiles. Обе функции проверяют, правильно ли компилируется и ссылается данный (встроенный) исходный код. Чтобы проверить, является ли заголовок самодостаточным, исходный код должен состоять из оператора include, который включает в себя файл заголовка для проверки, и основной функции:

include (CheckCXXSourceCompiles)

set (CMAKE_REQUIRED_INCLUDES "${CMAKE_CURRENT_SOURCE_DIR}")
check_cxx_source_compiles(
"#include \"file.h\"int main() { return 0;}" File_H_IsSelfContained)
message ("File_H_IsSelfContained: ${File_H_IsSelfContained}")

И то и другое check_cxx_source_compiles а также check_c_source_compiles может работать только во время настройки CMake, что, вероятно, не то, что вы хотите.

Поскольку обе функции используют базовую команду CMake try_compile, который не является сценарием, невозможно использовать функции в сгенерированном сценарии CMake, который запускается как пользовательская цель во время сборки.

1

Другие решения

Других решений пока нет …