मुझे आज इस तरह का एक अच्छा उपयोग उदाहरण मिला: डॉक्सिजन दस्तावेज जोड़ना।
मैं अपनी व्यक्तिगत सी ++ परियोजनाओं का निर्माण करने के लिए सीएमके (और निंजा) का उपयोग करता हूं। मैंने अपने बहुत सारे पूर्ण लेकिन अनियंत्रित प्रयासों में से एक को कुछ डॉक्सीजन दस्तावेज जोड़ने की इच्छा पर फैसला किया। मैंने यह भी सोचा कि इसे अन्य परियोजनाओं में जोड़ने के लिए भी साफ होगा, जैसे ही मैं इसे यथासंभव सामान्य बनाने के लिए काम करता हूं।
आरंभ करने के लिए, मैंने एक मानक डॉक्सीजन टेम्पलेट जेनरेट किया और इसका नाम बदल दिया।
cd my_projects/projectx
doxygen -g Doxyfile
mv Doxyfile Doxyfile.in
.in एक्सटेंशन पर ध्यान दें। शायद मैं जरूरी नहीं लेकिन परंपरागत, अगर मैं सही ढंग से समझता हूं।
अगला, मैंने अपने लक्ष्य को परिभाषित करने से ठीक पहले, मेरे CMakeLists.txt फ़ाइल में निम्न कोड ब्लॉक जोड़ा (सुनिश्चित नहीं है कि यह महत्वपूर्ण है लेकिन सीएमके कभी-कभी कुछ आदेशों के अनुक्रम के बारे में चिंतित होता है)।
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()
यह दस्तावेज़ नामक एक नया लक्ष्य बनाता है। सभी निर्दिष्ट करना इसे डिफ़ॉल्ट "सभी" लक्ष्य में जोड़ता है, लेकिन यह वैकल्पिक है। @ONLY निर्दिष्ट करना सुनिश्चित करता है कि किसी भी "$ {variable}" प्रकार चर को CONFIGURE_FILE द्वारा विस्तारित नहीं किया जाएगा, केवल "@ चर @ @ प्रकार। कुछ हद तक भ्रमित (कम से कम मेरे लिए), CMAKE_CURRENT_SOURCE_DIR प्रोजेक्ट निर्देशिका और CMAKE_CURRENT_BINARY_DIR को बिल्ड निर्देशिका में संदर्भित करता है।
अंत में, और यह वह जगह है जहां PROJECT_NAME et al आते हैं, मैंने 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' चर का उपयोग कैसे करते हैं? और क्या ये पुस्तकालय स्वतंत्र हैं या वे मुख्य पुस्तकालय/आवेदन के कुछ हिस्सों हैं? –
मै मैक्रोज़ के अंदर इन चर का उपयोग करता हूं जो स्रोत कोड उत्पन्न करता है। मैं $ {PROJECT_NAME} _SPDEF नामक एक शीर्ष स्तरीय लक्ष्य बनाता हूं जो अन्य परियोजनाएं इनकी पीढ़ी के बल पर निर्भर करती हैं। मैं जेनरेट कोड को उचित स्थान पर रखने के लिए _DIR चर का भी उपयोग करता हूं। – ScaryAardvark