मैं स्वचालित निर्भरता प्रसार जैसी आधुनिक सुविधाओं का उपयोग करने के लिए एक विरासत सीमेक सेटअप को फिर से लिखने की प्रक्रिया में हूं। (यानी target_include_directories(<target> PUBLIC <dir>)इसके बजाय चीजों का उपयोग करना include_directories(<dir>)।) वर्तमान में, हम मैन्युअल रूप से वैश्विक निर्देशिका गुणों का एक समूह सेट करके सभी परियोजना निर्भरता जानकारी संभालते हैं।
अपने परीक्षण में, मुझे कुछ उदाहरण मिले हैं जहां नए निर्माण में एक लक्ष्य एक पुस्तकालय से जुड़ा होगा जो पुराने बिल्ड नहीं होगा। मैं इसे स्पष्ट रूप से लिंक नहीं कर रहा हूं, इसलिए मुझे पता है कि यह लक्ष्य की निर्भरता से आ रहा है, लेकिन यह पता लगाने के लिए कि मुझे कौन सी परियोजना के सभी के माध्यम से पुनरावर्ती रूप से देखना है CMakeLists.txt, जो मुझे मिल रही निर्भरता पदानुक्रम के बाद है एक जो पुस्तकालय में विचाराधीन है। हमारे पास दर्जनों पुस्तकालय हैं इसलिए यह एक तुच्छ प्रक्रिया नहीं है।
क्या सीएमके देखने के लिए कोई भी तरीका प्रदान करता है, प्रत्येक लक्ष्य के लिए, उसकी कौन सी निर्भरता स्पष्ट रूप से जोड़ी गई थी, और कौन-कौन से परिवर्तनशील निर्भरता के माध्यम से प्रचारित की गई थीं?
ऐसा लगता है कि --graphvizआउटपुट इस भेद को दर्शाता है, इसलिए स्पष्ट रूप से सीएमके संदर्भ को आंतरिक रूप से जानता है। हालाँकि, मैं treeकमांड लाइन पर निर्भरता की जानकारी दिखाने के लिए एक तरह की स्क्रिप्ट लिखना चाहता हूं , और ग्राफविज़ फ़ाइलों को पार्स करना एक बुरा सपना और हैक दोनों लगता है।
जहाँ तक मेरा बता सकते हैं, cmake-file-apiहै न यह जानकारी शामिल। मैंने सोचा था कि codemodel/target/dependenciesक्षेत्र काम कर सकता है, लेकिन यह स्थानीय और सकर्मक निर्भरता दोनों को एक साथ मिलाता है। और backtraceप्रत्येक निर्भरता का क्षेत्र केवल वर्तमान लक्ष्य के लिए add_executable/ add_libraryकॉल पर वापस आता है ।
--graphizविकल्प आपके प्रश्न का उत्तर कैसे नहीं देता है? पार्सिंग डॉट फाइलें एक बुरे सपने की तरह क्यों महसूस होती हैं? डॉट फाइलें मानव-पठनीय प्रतिनिधित्व से जुड़े बिंदुओं का सबसे सरल, सामान्य और लचीला तरीका है।gvprउपयोगिता के साथ आप अजीब-ईश शैली में उनके साथ कुछ भी कर सकते हैं, और आप उन्हें अन्य भाषाओं में आयात कर सकते हैं। एक डॉट फाइल क्यों है, जो कि वस्तुतः लक्ष्यों के बीच निर्भरता की एक पेड़ जैसी संरचना का प्रतिनिधित्व करता है, न कि "देखने का तरीका" जो आप के लिए पूछते हैं?