पर निर्भरता जोड़ें मेरे पास कई सबप्रोजेक्ट्स के साथ एक सीएमके प्रोजेक्ट है। उनमें से प्रत्येक एक फ़ंक्शन का उपयोग कर सकता है जो मैं कुछ निश्चित जानकारी (add_custom_command को कॉल करके) के साथ एक छोटी पाठ फ़ाइल उत्पन्न करने के लिए प्रदान करता हूं। अंतिम चरण में मैं उन सभी फ़ाइलों को एक बड़ी टेक्स्ट फ़ाइल में जोड़ना चाहता हूं।सीएमके: add_custom_command गतिशील रूप से
मैंने एक कस्टम कमांड बनाया है जो बनाई गई फ़ाइलों (सभी एक ही स्थान पर) की खोज करता है और उन्हें विलय करता है।
समस्या यह है कि मैं यह अंतिम चरण उपप्रोजेक्ट में किए जा रहे सभी छोटे चरणों पर निर्भर करता हूं, जबकि मुझे वास्तव में नहीं पता कि कितनी फाइलें प्रदान की जाएंगी।
मेरे अंतिम आदेश लगता है:
add_custom_command(OUTPUT combination.txt
COMMAND create combination.txt from all files from /path/)
और मेरे create-छोटे पाठ फ़ाइल के लिए प्रत्येक-subproject आदेश की तरह दिखता है:
add_custom_command(OUTPUT /path/${sub_project_name}.txt
COMMAND create /path/${sub_project_name}.txt)
और जब मैं उन छोटे फ़ाइलों को बनाने के मैं "combination.txt" बनाने के लिए की तरह कुछ करना चाहते हैं /path/${sub_project_name}.txt पर निर्भर
तो काश मैं कर सकता:
add_dependency(combination.txt /path/${sub_project_name}.txt)
हालांकि यह केवल लक्ष्य के लिए काम करता है।
मैं भी OBJECT_DEPENDS साथ set_source_files_properties उपयोग करने के लिए कोशिश की है, लेकिन यह (शायद अपनी इरादा add_target के सीपीपी फाइलों के साथ प्रयोग की जाने वाली?)
पिछले रास्ता मिल यह काम करने के लिए मैं देख रहा हूँ है काम नहीं करता है लगता है एक कैश चर जो उन सभी छोटे फ़ाइलों रास्तों जमा है और फिर इस तरह इसका इस्तेमाल उपयोग करने के लिए:
add_custom_command(OUTPUT combination.txt
COMMAND create combination.txt from all files from /path/
DEPENDS ${all_small_files_list})
लेकिन यह अंत में मैं क्या करना चाहते है।
यह काम करेगा, लेकिन बिल्कुल अपेक्षित नहीं: हर बार जब मैं कॉल करता हूं, तो सभी लक्ष्य (संयोजन, प्रोजेक्ट और प्रोजेक्ट 2) पुनर्निर्माण किए जाएंगे - इसलिए फाइलें फिर से चालू हो जाएंगी। यह उतना अच्छा नहीं है जितना हो सकता है;) मेरे लिए अपेक्षित व्यवहार किसी भी फाइल को पुन: उत्पन्न नहीं करना है जब तक कि यह आवश्यक न हो। सीएमके के दस्तावेज़ों के अनुसार - add_custom_target हर बार बनाया जा रहा है। मेरी इच्छा है कि मेरे पास add_custom_command के रूप में काम करने का समाधान हो - जो केवल तभी बनता है जब कोई निर्भरता बदल जाती है। –
प्रोजेक्ट.txt जेनरेट करने के लिए आप निर्भरता के रूप में क्या उपयोग करते हैं? मैं _think_ cmake-doc क्या कहना चाहता है, कि एक कस्टम_ लक्ष्य हमेशा जांचता है कि इसे पुनर्निर्मित करना है या नहीं - कम से कम ऐसा लगता है कि यह मेरे लिए ऐसा काम करता है। –
ठीक है, हम इसे कैसे करते हैं, इसके बारे में कुछ उचित पढ़ने के बाद, मुझे यह स्वीकार करना होगा कि मैं बहुत समय से पहले था। उत्तर का मेरा अद्यतन देखें। –