Tôi đã tìm thấy ví dụ sử dụng tốt về chính xác hiện tại: thêm tài liệu Doxygen.
Tôi sử dụng CMake (và Ninja) để tạo các dự án C++ cá nhân của mình. Tôi quyết định chọn một số tài liệu Doxygen cho một trong những nỗ lực hoàn chỉnh nhưng không có giấy tờ của tôi. Tôi cũng nghĩ rằng nó sẽ được gọn gàng để thêm nó vào các dự án khác cũng như ngay sau khi tôi làm việc ra làm thế nào để làm cho nó như là chung chung nhất có thể.
Để bắt đầu, tôi đã tạo mẫu Doxygen chuẩn và đổi tên nó.
cd my_projects/projectx
doxygen -g Doxyfile
mv Doxyfile Doxyfile.in
Lưu ý phần mở rộng .in. Có lẽ không cần thiết nhưng thông thường, nếu tôi hiểu chính xác.
Tiếp theo, tôi đã thêm khối mã sau vào tệp CMakeLists.txt của mình, ngay trước khi xác định mục tiêu của mình (không chắc liệu điều đó có quan trọng hay không đôi khi CMake đôi khi kén về chuỗi lệnh nhất định).
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()
Điều này tạo mục tiêu mới được gọi là doc. Chỉ định ALL thêm nó vào mục tiêu "tất cả" mặc định, nhưng đó là tùy chọn. Chỉ định @ONLY đảm bảo rằng mọi biến loại "$ {variable}" sẽ không được mở rộng bởi CONFIGURE_FILE, chỉ các loại "@ variable @". Hơi ít gây nhầm lẫn (với tôi ít nhất), CMAKE_CURRENT_SOURCE_DIR dường như đề cập đến thư mục dự án và CMAKE_CURRENT_BINARY_DIR đến thư mục xây dựng.
Cuối cùng, và đây là nơi PROJECT_NAME et al đến, tôi đã chỉnh sửa Doxyfile.in.
Đây là sự khởi đầu của Doxyfile.in mới của tôi:
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
Bạn nhận được các ý tưởng, tôi nghĩ. Một khi điều này là hoàn toàn genericised (là một từ?) Tôi có thể sao chép nó vào các dự án khác của tôi và miễn là tôi tag lên mã của tôi, tôi sẽ có tài liệu tốt đẹp ở khắp mọi nơi.
Thông báo PROJECT_BRIEF không được chỉ định. Tôi đã không hoàn thành với điều này và vẫn còn một vài khoảng trống cho tôi để suy nghĩ về. Ví dụ: PROJECT_VERSION_TWEAK thực sự chưa chứa bất kỳ thứ gì. Tôi sẽ phải tìm cách để có được số xây dựng của tôi ở đó.
Bạn sử dụng biến 'PROJECT_NAME',' PROJECT_SOURCE_DIR' và 'PROJECT_BINARY_DIR' như thế nào? Và những thư viện này độc lập hay chúng chỉ là một phần của thư viện/ứng dụng chính? –
Tôi sử dụng các biến này bên trong các macro tạo mã nguồn. Tôi tạo mục tiêu cấp cao nhất được gọi là $ {PROJECT_NAME} _SPDEF mà các dự án khác có thể phụ thuộc vào để tạo ra các mục tiêu này. Tôi cũng sử dụng các biến _DIR để đặt mã được tạo ở vị trí thích hợp. – ScaryAardvark