我今天發現了一個很好的使用例子:添加Doxygen文檔。
我使用CMake(和Ninja)來構建我的個人C++項目。我決定隨心所欲地將一些Doxygen文檔添加到我非常完整但沒有記錄的工作中。我還認爲將它添加到其他項目中並且只要我研究如何使其儘可能通用就行了。
首先,我生成了一個標準的Doxygen模板並重新命名了它。
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 = "@[email protected]"
PROJECT_NUMBER = @[email protected]
PROJECT_BRIEF =
PROJECT_LOGO = @[email protected]/res/doc_logo-200x55.png
OUTPUT_DIRECTORY = @[email protected]/doc
你的想法,我想。一旦這是完全通用的(這是一個詞?)我可以將它複製到我的其他項目,只要我標記我的代碼,我將有很好的文檔到處。
注意PROJECT_BRIEF未指定。我還沒有完成這個,還有幾個空白讓我思考。例如PROJECT_VERSION_TWEAK實際上並未包含任何內容。我將不得不找到一種方法讓我的內部編號在那裏。
你如何使用'PROJECT_NAME','PROJECT_SOURCE_DIR'和'PROJECT_BINARY_DIR'變量?這些庫是獨立的還是它們只是主庫/應用程序的一部分? – 2011-12-21 09:19:33
我在生成源代碼的宏內部使用這些變量。我創建了一個稱爲$ {PROJECT_NAME} _SPDEF的頂級目標,其他項目可以依靠這些目標來強制生成這些目標。我還使用_DIR變量將生成的代碼放置在適當的位置。 – ScaryAardvark 2011-12-21 09:53:58