मैं पहली बार cmake उदाहरण लिख रहा हूँ।

यहाँ CMakeFiles.txt का एक हिस्सा है:

add_custom_command(
   OUTPUT ${CODEGEN_SRC}
   PRE_BUILD
   COMMAND ${CODEGEN_CMD} ${SERVICE_XML} --generate-cpp- code=/home/hello/include/gen/testGenCode
   COMMENT "Generate gdbus code"
)

add_custom_target(${CODEGEN_TARGET}
    DEPENDS ${CODEGEN_SRC}
)

add_custom_command का उपयोग करके कमांड सिंटैक्स में gdbus-codegen-glibmm का उपयोग करके कोड जेनरेट करें।

हालांकि, मेरी उम्मीदों के विपरीत, जब मैं वास्तव में सेमेक और मेक करता हूं, तो ऐसा लगता है:

cmake ..
CMake Error at Server/CMakeLists.txt:1 (ADD_EXECUTABLE):
  Cannot find source file:
           #### generate File ####
CMake Error at Client/CMakeLists.txt:36 (ADD_EXECUTABLE):
  Cannot find source file:
           #### generate File ####

फिर, यदि आप मेक के साथ आगे बढ़ते हैं, तो add_custom_command में COMMANT की सामग्री आउटपुट होती है, और कोड वास्तव में उत्पन्न होते हैं।

जेनरेट कोड की जांच करने के बाद, cmake .. के साथ आगे बढ़ें और सामान्य रूप से निर्माण करने के लिए फिर से बनाएं।

सर्वर/CMakeLists.txt, क्लाइंट/CMakeLists.txt मैंने में ADD_DEPENDENCIES का उपयोग करके ${CODEGEN_TARGET} की निर्भरता निर्धारित की है, लेकिन यह मेरी अपेक्षा से अलग काम करता है।

मैं पहले चलाने के लिए gdbus-codegen-glibmm कमांड कैसे प्राप्त कर सकता हूं?

0
JungWoo 25 नवम्बर 2021, 10:59
1
शीर्षक में आप "post_build" लिखते हैं, कोड में आप "PRE_BUILD" का उपयोग करते हैं, लेकिन वास्तव में आप कस्टम कमांड "जेनरेटिंग फाइल्स" सिग्नेचर और आप इसे इस तरह से इस्तेमाल करते हैं। कृपया, कोई समस्या बनाते समय और कोड लिखते समय अधिक सावधान रहें।
 – 
Tsyvarev
25 नवम्बर 2021, 11:21
"मैंने ADD_DEPENDENCIES का उपयोग करके ${CODEGEN_TARGET} की निर्भरता निर्धारित की है ..." - अपने कोड का वर्णन न करें, इसके बजाय इसे जोड़ें प्रश्न पोस्ट "जैसा है"। आपके कोड में कुछ गड़बड़ है, लेकिन इसका केवल एक अस्पष्ट विवरण होने से हम आपकी मदद नहीं कर सकते। आपको न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य उदाहरण तैयार करने में सक्षम होना चाहिए जो आपकी समस्या को प्रदर्शित करता है। कृपया वो करें।
 – 
Tsyvarev
25 नवम्बर 2021, 11:25
मैं पहली बार स्टैक ओवरफ्लो पर एक प्रश्न पोस्ट कर रहा हूं, इसलिए मैं बहुत अनुभवहीन हूं। हम आपके द्वारा छोड़ी गई टिप्पणियों पर ध्यान देंगे। धन्यवाद। त्सिवरेव!
 – 
JungWoo
25 नवम्बर 2021, 12:01
यह देखने लायक हो सकता है - ऐसा लगता है कि आपका इरादा वास्तव में एक प्री-जेनरेट चरण जोड़ने का है... stackoverflow.com/questions/19898502/…
 – 
Den-Jason
25 नवम्बर 2021, 12:18

1 उत्तर

सबसे बढ़िया उत्तर

Add_custom_command बिल्ड चरण के दौरान कमांड चलाएगा (मेक चलाते समय)। चूंकि यह अगले लक्ष्य के लिए आवश्यक फाइलें उत्पन्न करता है, यदि फ़ाइल कभी उत्पन्न नहीं हुई है तो यह विफल हो जाएगी।

आप cmake चलाते समय भी फ़ाइल को कॉन्फ़िगर कर सकते हैं, add_custom_command() के अतिरिक्त execute_process() का उपयोग कर। आप लक्ष्य के लिए प्लेसहोल्डर बनाने के लिए config_file() का उपयोग कर सकते हैं, इससे पहले कि आप इसे बाद में gdbus-codegen-glibmm के साथ मिटा दें जब मेक चल रहा हो।

1
Laurent Jospin 25 नवम्बर 2021, 11:14
धन्यवाद, लॉरेंट जोस्पिन मैंने इसे हल किया!
 – 
JungWoo
25 नवम्बर 2021, 12:00