मैं एक प्रोजेक्ट में FindProtobuf मॉड्यूल का उपयोग कर रहा हूं जहां प्रोटोकॉल बफर फ़ाइलें उप-निर्देशिका में हैं। मैं सीपीपी फाइलें उत्पन्न करने के लिए प्रोटोकॉल का आह्वान करने के लिए उस उप-निर्देशिका में CMakeLists.txt फ़ाइल चाहता हूं। मेरे परियोजना फ़ोल्डर संरचना इस तरह है:सीएमके और FindProtobuf
cammy/CMakeLists.txt # Root CMakeLists.txt
cammy/protofiles/test.proto # protofile
cammy/protofiles/CMakeLists.txt
मैं शामिल (FindProtobuf) है, find_package मंगलाचरण और Protobuf फ़ोल्डर में CMakeLists.txt फ़ाइल में PROTOBUF_GENERATE_CPP करने के लिए कॉल।
निष्पादन योग्य बिल्ड चरण रूट CMakeLists.txt फ़ाइल में है और मैं इस फ़ाइल यानी इस फ़ाइल में निष्पादन योग्य लक्ष्य उत्पन्न करता हूं।
add_executable(${EXEC} ${SRCS} ${PROTO_SRC} ${PROTO_HEADER})
target_link_libraries(${EXEC} ${PROTOBUF_LIBRARIES})
दोनों जड़ CMakeLists.txt
जब मैं cmake चलाने में परिभाषित कर रहे हैं, यह protoc नहीं चलता है उत्पन्न करने के लिए स्रोत फ़ाइलें भले ही मैं expilicitly निष्पादन जिससे एक निर्भरता बनाने के लिए उत्पन्न सूत्रों टाई।
जब मैं protakeiles फ़ोल्डर में रूट CMMELists.txt में CMakeLists.txt की सभी सामग्री को स्थानांतरित करता हूं, तो प्रोटो फ़ाइलों को संकलित किया जाता है।
क्या कोई इस से मेरी सहायता कर सकता है? मैं प्रोटोकॉल फ़ोल्डर में बनाई गई CMakeLists.txt फ़ाइल में जाने के लिए सभी प्रोटोकॉल बफर बिल्डिंग सामान चाहता हूं।
मैंने यह भी देखा कि आंतरिक CMakeLists.txt (जैसे PROTO_SRC) में उत्पन्न चर को आंतरिक फ़ाइल में मुद्रित किया जाता है (यानी मुझे सही जेनरेट सीपीपी फ़ाइल नाम मिलता है) लेकिन जब मैं रूट फ़ाइल में एक ही चर मुद्रित करता हूं। । यह खाली है। इसके लगभग जैसे कि मुझे "निर्यात" करने की आवश्यकता है (अगर cmake में कोई रास्ता था) रूट फ़ोल्डर में चर।
किसी भी मदद की बहुत सराहना की जाएगी।
धन्यवाद कार्तिक
चीजों को साफ़ करने के लिए धन्यवाद। इसे समेटने के लिए, क्या मैं यह कहने में सही हूं कि नेस्टेड प्रोटो संकलन क्यों काम नहीं करता है क्योंकि कारण उत्पन्न किए गए चर रुकने के दायरे में नहीं हैं? साथ ही, क्या जेनरेटेड फ्लैग को चिह्नित करना संभव है जब हम रूट फ़ाइल में इसे करने के बजाय स्थानीय लोगों से पैरेंट स्कोप चर सेट करते हैं? आखिरकार, एक वैकल्पिक दृष्टिकोण प्रोटोबफ सामान को पुस्तकालय के रूप में बनाने के लिए होगा और इसे रूट निष्पादन योग्य से लिंक करें? –
@ कार्टिकएयर निश्चित नहीं है कि "रुक के दायरे में नहीं" का अर्थ है, लेकिन यदि यह "शीर्ष-स्तर के CMakeLists.txt के दायरे में नहीं है", तो हाँ। क्यू 2 के लिए, नहीं - जहां तक मुझे पता है कि मूल दायरे में परिभाषित फाइलों पर गुण सेट करने का कोई तरीका नहीं है। क्यू 3 के लिए, हाँ - मेरा मानना है कि यह एक अच्छा दृष्टिकोण होगा। – Fraser
@Fraser आपके उत्तर के लिए धन्यवाद, मेरे पास एक समान सवाल है, मैं प्रोजेक्ट को एडजस्ट करता हूं और अभी भी काम नहीं करता, क्या यह संभव है कि मुझे और सुझाव दें? रेफरी: http://stackoverflow.com/questions/29720410/no-member-found-when-use-cmake-construct-proto, नमूना प्रोजेक्ट: https://github.com/yuikns/cmake-proto –