Сегодня я нашел хороший пример использования именно этого: добавление документации по Doxygen.
Я использую CMake (и Ninja) для создания своих личных проектов на C ++.Я решил прихотиться, чтобы добавить документацию по Doxygen к одной из моих почти полных, но недокументированных работ.Я также подумал, что было бы неплохо добавить его в другие проекты, как только я разберусь, как сделать его как можно более универсальным.
Для начала я создал стандартный шаблон Doxygen и переименовалit.
cd my_projects/projectx
doxygen -g Doxyfile
mv Doxyfile Doxyfile.in
Обратите внимание на расширение .in.Вероятно, не обязательно, но обычно, если я правильно понимаю.
Затем я добавил следующий блок кода в мой файл CMakeLists.txt, непосредственно перед определением моих целей (не уверен, что это важно, но CMake иногда суетится из-запоследовательность определенных команд).
FIND_PACKAGE(Doxygen)
IF("${DOXYGEN_FOUND}" MATCHES "^YES$")
CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
@ONLY)
ADD_CUSTOM_TARGET( doc ALL
COMMAND ${DOXYGEN_EXECUTABLE}
${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Doxygenating..."
VERBATIM)
ENDIF()
Создает новую цель с именем doc.Указание ALL добавляет его к цели по умолчанию «all», но это необязательно.Указание @ONLY гарантирует, что любые переменные типа «$ {variable}» не будут расширены с помощью CONFIGURE_FILE, только типы «@ variable @».Несколько запутанно (по крайней мере для меня), CMAKE_CURRENT_SOURCE_DIR, по-видимому, ссылается на каталог проекта, а CMAKE_CURRENT_BINARY_DIR - на каталог сборки.
Наконец, именно здесь PROJECT_NAME и др., Я отредактировал Doxyfile.in.
Это начало моего нового Doxyfile.in:
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "@PROJECT_NAME@"
PROJECT_NUMBER = @PROJECT_VERSION_TWEAK@
PROJECT_BRIEF =
PROJECT_LOGO = @CMAKE_CURRENT_SOURCE_DIR@/res/doc_logo-200x55.png
OUTPUT_DIRECTORY = @CMAKE_CURRENT_SOURCE_DIR@/doc
Вы, я думаю, поняли идею.Как только это будет полностью обобщено (это слово?), Я могу скопировать его в другие мои проекты, и, пока я помечу свой код, у меня будет отличная документация повсюду.
Обратите внимание, что PROJECT_BRIEF не указан.Я еще не закончил с этим, и есть еще несколько пробелов, о которых я могу подумать.Например, PROJECT_VERSION_TWEAK на самом деле еще ничего не содержит.Мне нужно будет найти способ, чтобы получить мой номер сборки там.