Bugün tam olarak bunun iyi bir örneğini buldum: Doxygen dokümantasyonunu eklemek.
Kişisel C++ projelerimi oluşturmak için CMake (ve Ninja) kullanıyorum. Oldukça eksiksiz ve belgelenmemiş çabalarıma bir miktar Doxygen belgesi eklemeye karar verdim. Ayrıca, diğer projelere de eklemenin, olabildiğince genel olarak nasıl yapılacağını anladığım kadarıyla düzgün olacağını düşündüm.
Başlamak için standart bir Doxygen şablonu oluşturdum ve yeniden adlandırdım.
cd my_projects/projectx
doxygen -g Doxyfile
mv Doxyfile Doxyfile.in
.in uzantısına dikkat edin. Muhtemelen gerekli değil ama geleneksel olarak, eğer doğru anlarsam.
Daha sonra, CMakeLists.txt dosyasında, hedeflerimi tanımlamadan hemen önce aşağıdaki kod bloğunu ekledim (önemli olup olmadığından emin olmamakla birlikte, CMake bazen belirli komutların sırasına göre yanık oluyor).
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()
Bu, doc adında yeni bir hedef oluşturur. ALL belirtmek varsayılan "all" hedefine ekler, ancak bu isteğe bağlıdır. @ONLY belirtmek, "$ {variable}" türündeki değişkenlerin CONFIGURE_FILE, sadece "@ variable @" türleriyle genişletilmemesini sağlar. Biraz kafa karıştırıcı (bana en azından), CMAKE_CURRENT_SOURCE_DIR, proje dizini ve yapı dizinine CMAKE_CURRENT_BINARY_DIR başvuruyor gibi görünüyor.
Son olarak, bu noktada PROJECT_NAME ve diğerlerinin geldiği yer, Doxyfile.in dosyasını düzenledim.
Bu
benim yeni Doxyfile.in başlangıcıdır:
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "@[email protected]"
PROJECT_NUMBER = @[email protected]
PROJECT_BRIEF =
PROJECT_LOGO = @[email protected]/res/doc_logo-200x55.png
OUTPUT_DIRECTORY = @[email protected]/doc
Sen fikir, bence. Bu tamamen jenerikleştirildikten sonra (bu bir sözcük mü?) Diğer projelerime kopyalayabilirim ve kodumu etiketlediğim sürece her yerde güzel belgelerim olur.
Uyarı PROJECT_BRIEF belirtilmemiş. Bunu bitirmedim ve düşünmem gereken birkaç boşluk var. Örneğin, PROJECT_VERSION_TWEAK henüz bir şey içermiyor. Orada yapı numaramı almanın bir yolunu bulmalıyım.
"PROJECT_NAME", "PROJECT_SOURCE_DIR" ve "PROJECT_BINARY_DIR" değişkenlerini nasıl kullanıyorsunuz? Ve bu kütüphaneler bağımsız mı yoksa sadece bir ana kütüphane/uygulamanın parçaları mı? –
Bu değişkenleri kaynak kodu oluşturan makrolar içinde kullanıyorum. Diğer projelerin bunlardan güç üretmeye dayanabileceği $ {PROJECT_NAME} _SPDEF adında en üst düzey bir hedef oluşturuyorum. Oluşturulan kodu uygun konuma yerleştirmek için _DIR değişkenlerini de kullanıyorum. – ScaryAardvark