Я хочу автоматически проверить, могут ли все заголовки в проекте быть построены самостоятельно. Это распространенный метод проверки того, включают ли заголовки все свои зависимости. К сожалению, я не мог найти, как это может быть достигнуто. Может быть, кто-то может помочь? Будучи новичком CMake, я не уверен, что смогу самостоятельно разработать решение.
Надеемся, что решение не потребует создания новых .cc
файлы или запуск любых внешних скриптов.
Посмотрите на стандартные функции модуля 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, который запускается как пользовательская цель во время сборки.
Других решений пока нет …