2010-11-19 16 views
5

मेरी प्रोजेक्ट में मेरे पास "स्कीमा" फ़ाइल और उपयोगिता है जिसे मैंने हेडर फ़ाइल जेनरेट करने के लिए लिखा था। मैं आवेदन बनाने के लिए cmake का उपयोग कर रहा हूं और स्रोत निर्माण से बाहर हूं।cmake के साथ स्रोत में हेडर कैसे उत्पन्न करें?

वर्तमान में मुझे हेडर फ़ाइल को हाथ से फिर से बनाना है और फिर एप्लिकेशन बनाना है।

तब मैं इस CMakeLists.txt कथन के साथ आया, लेकिन वे स्रोत निर्देशिका में बजाय बिल्ड निर्देशिका में शीर्षलेख उत्पन्न करते हैं।

configure_file(generator.pl generator COPYONLY) 
configure_file(schema.txt.in schema.txt COPYONLY) 
add_custom_command(
    OUTPUT generated.h 
    COMMAND ./generator schema.txt generated.h 
    DEPENDS mib_schema.txt.in generator.pl 
    COMMENT "Regenerating header file..." 
) 

क्या यह संभव है स्रोत निर्देशिका में शीर्ष लेख उत्पन्न करने के लिए?

संपादित (उत्तर प्रतिबिंबित करने के लिए): करने के लिए,

${CMAKE_CURRENT_BINARY_DIR} 

तो:

फ़ाइल पूरी तरह से या तो

${CMAKE_CURRENT_SOURCE_DIR} 

या के साथ अपने रास्ते योग्यता से सीधे पहुँच सकते हैं मेरे स्रोत डीआईआर में हेडर उत्पन्न करें, CMakeLists.txt से पिछला अंश बन जाता है:

add_custom_command(
    OUTPUT generated.h 
    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/generator.pl ${CMAKE_CURRENT_SOURCE_DIR}/schema.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/generated.h 
    DEPENDS mib_schema.txt.in generator.pl 
    COMMENT "Regenerating header file..." 
) 

जो वास्तव में सरल है। धन्यवाद

+0

यह वास्तव में एक अच्छा विचार है। यदि मैं स्रोत निर्देशिका में जेनरेट की गई फ़ाइल को सहेज सकता हूं तो यह स्रोत पैकेज में शामिल हो जाता है जो कि मैं चाहता हूं (क्योंकि इस तरह से मेरी लाइब्रेरी के उपयोगकर्ताओं को फ़ाइल जेनरेटर को संशोधित नहीं करने तक फ़ाइल उत्पन्न करने की आवश्यकता नहीं होती है और/या स्रोत डेटा फ़ाइल।) इसका मतलब है कि अधिक लोग मेरी लाइब्रेरी संकलित कर सकते हैं! –

उत्तर

5

मुझे लगता है कि उत्पन्न हैडर अच्छी तरह से बाइनरी निर्देशिका में रखा जाता है, जब से तुम एक ही स्रोत और विभिन्न उत्पन्न अलग शीर्षक में जिसके परिणामस्वरूप विन्यास के साथ निर्देशिका का निर्माण करने के बनाने के लिए चाहते हो सकता है --to।

आप अपने प्रोजेक्ट के लिए निर्माण निर्देशिका में शामिल करना चाहिए:

include_directories(${CMAKE_CURRENT_BINARY_DIR}) 
+0

यदि सीएमके को आपकी फ़ाइल ढूंढने में परेशानी है, तो उन्हें पूरी तरह से '$ {CMAKE_CURRENT_BINARY_DIR}' से अर्हता प्राप्त करें। यदि आप सुनिश्चित हैं कि आप स्रोत निर्देशिका में अपनी फाइलें बनाना चाहते हैं, तो आप अपने 'कॉन्फ़िगरेशन' और' add_custom_command' आदेशों में '$ {CMAKE_CURRENT_SOURCE_DIR}' का भी उपयोग कर सकते हैं। – tibur

+0

मैं सहमत हूं, जेनरेट की गई फ़ाइलों के लिए सबसे अच्छी जगह बिल्ड निर्देशिका में है। यह हेडर स्रोत निर्देशिका में सुविधाजनक है क्योंकि यह कोडिंग के दौरान उपयोगी कोड पूर्णता देता है। यह सभी बिल्ड कॉन्फ़िगरेशन के लिए एक ही शीर्षलेख है, इसलिए इसे स्रोत निर्देशिका में रखना हानिकारक नहीं है। एनबी: मुझे टिप्पणियां संपादित करने में समस्याएं आ रही हैं, शायद इसलिए कि मैं एक अद्वितीय आईपी का उपयोग कर एक बड़े नेटवर्क पर हूं। गलतफहमी के लिए खेद है। – amso

संबंधित मुद्दे