2012-01-09 8 views
14

मैं डेल्फी के लिए बहुत सारे घटक और पुस्तकालय लिखता हूं, जिनमें से अधिकांश को बीपीएल पैकेजिंग के उपयोग की आवश्यकता होती है ताकि उन्हें आईडीई में स्थापित किया जा सके।पैकेज (बीपीएल) स्वचालित नामकरण प्रत्यय

यह काफी आसान है और जब तक आप पैकेज प्रोजेक्ट फ़ाइलों (एकल प्रोजेक्ट ग्रुप में) का एक सेट बनाए रखना चाहते हैं, तब तक अच्छी तरह से काम करता है, लेकिन विभिन्न डेल्फी संस्करणों के लिए उन पैकेजों को संकलित और वितरित करना भी चाहते हैं।

अब मैं डेल्फी के प्रत्येक संस्करण के लिए एक अलग पैकेज परियोजना बनाने गया है, और स्पष्ट रूप से एक प्रत्यय के रूप में एक डेल्फी संस्करण पहचानकर्ता को परिभाषित (जैसे Kinect_XE.bpl और Kinect_XE2.bpl) अप करने के लिए।

मुझे पता है कि, एक पैकेज परियोजना के लिए परियोजना विकल्प, के तहत विवरण में, वहाँ क्षेत्रों उदारीकरण उपसर्ग और (अधिक महत्वपूर्ण मेरी जरूरतों के लिए) कर रहे हैं उदारीकरण प्रत्यय हूँ।

मुझे और पता है कि अगर मैं LIB प्रत्यय में कोई मान डालता हूं, तो इसे संकलित बीपीएल के फ़ाइल नाम के अंत में जोड़ा जाएगा।

मेरा प्रश्न है, तथापि, पहले चाहे वह आईडीई स्वचालित रूप से आईडीई/RTL संस्करण संख्या के साथ उदारीकरण प्रत्यय क्षेत्र को पॉप्युलेट करने के लिए संभव है, और यदि हां ... कैसे?

मैं, काफी हद तक निश्चित यह संभव है कर रहा हूँ के रूप में यह लगता है कि vcl120.bpl (और डेल्फी के प्रत्येक संबंधित संस्करण के लिए अपने समकक्षों) (आवश्यकताएं) संदर्भित किया जा सकता है अपनी खुद की संकुल की सिर्फ का उपयोग कर पूर्ण vcl120 टाइप करने के बजाय vcl। वास्तव में, यह वही व्यवहार है जिसे मैं प्राप्त करने की उम्मीद कर रहा हूं ... जहां मेरे पैकेज प्रत्यय को समायोजित करने के लिए संस्करण-विशिष्ट संदर्भ प्रदान किए बिना एक दूसरे के रूप में (निरंतर के रूप में) संदर्भित कर सकते हैं।

उतना ही महत्वपूर्ण यह है कि इसे हल करने से मुझे एक परियोजना समूह में परियोजना फ़ाइलों का एक सेट बनाए रखने में मदद मिलेगी (XE2 के स्पष्ट अपवाद के साथ जहां इसकी परियोजना फाइलें डेल्फी के पिछले संस्करणों के साथ बहुत अच्छी तरह से व्यवहार नहीं करती हैं प्लेटफ़ॉर्म अतिरिक्त) के लिए।

मुझे लगता है कि मैं उदारीकरण प्रत्यय क्षेत्र में $ (VER) (या कुछ इसी तरह) की तरह एक मूल्य डाल करने के लिए आवश्यकता हो सकती है पर शक है, लेकिन इस काम करने के लिए नहीं दिखाई देता है और मैं घूमते हैं गूगल सही की तलाश में उपाय।

आशा है कि आप मदद कर सकते हैं!

UPDATE 1

मैं अब एक IDE प्लगइन लिख रहा हूँ XE2, जो DLL देता है और गरीबी रेखा से नीचे एक नया विकल्प AutoSuffix बुलाया परियोजनाओं के लिए (बहुत कम में ) के साथ प्रयोग की जाने वाली डेल्फी 2007। जब पर, ऑटोसफिक्स प्लगइन स्थापित करने के साथ किसी भी आईडीई को तुरंत परियोजना के लिए सही आईडीई संस्करण प्रत्यय लागू किया जाएगा।

ऑटोसफिक्स प्लगइन अगले 24 घंटों के भीतर सभी के लिए उपलब्ध (स्वतंत्र रूप से) उपलब्ध कराया जाएगा, और यह प्रश्न तदनुसार अपडेट किया गया है।

अद्यतन 2

ठीक है ... डेल्फी 2007 दर्द से किया जा रहा है! मैंने ऑटोसफिक्स को 200 9 से XE2 तक काम किया है, लेकिन 2007 को थोड़ी अधिक समय की आवश्यकता है (धैर्य की सराहना की)।

अद्यतन 3

ऐसा लगता है जैसे कि Embarcadero संस्करणों के बीच सरल पैकेज एकीकरण के लिए हमारे सामूहिक रोना सुना है।

मार्क यह देखने के लिए जा रहा है कि डेल्फी के भविष्य के संस्करण {$ LIBSUFFIX ऑटो} सुविधा को समायोजित कर सकते हैं या नहीं। मैं जल्द ही वापस सुनना चाहता हूं कि यह मामला होगा या नहीं। यदि ऐसा है, तो यह निश्चित रूप से ऑटोसफिक्स को XE2 और पुराने संस्करणों पर काम करने की आवश्यकता होगी (वर्तमान में यह सरल ऑटो स्विच प्रदान नहीं करता है .. इसकी अपनी विधि है)।

मेरे आशा अब कि EMB इस अनुरोध को गंभीरता से लेते हैं, भविष्य में इतना है कि यह मौजूदा संस्करण पर AutoSuffix का उपयोग कर सभी संस्करणों करवाते प्रक्रिया को एकजुट करने का एक सरल मामले हो जाता है एक अभिन्न सुविधा के रूप में यह प्रदान करती है!

+0

नहीं संकलक संस्करण बल्कि एक आईडीई/RTL संस्करण। – OnTheFly

+0

सही ... तदनुसार संपादित! मेरे हिस्से पर एक मूर्खतापूर्ण गलती! – LaKraven

+2

मुझे मिलता है ** या तो कोई रिपोर्ट # 83229 नहीं है, या आप उस रिपोर्ट को देखने के लिए अधिकृत नहीं हैं। ** जब मैं इसे एक्सेस करने का प्रयास करता हूं (लॉग इन) – LaKraven

उत्तर

5

XE2 तक डेल्फी के लिए AFAIK ऐसा करने के लिए कोई automatism नहीं है।

के संबंध में की आवश्यकता है खंड: जब आप require एक और पैकेज आप वास्तव में डीसीपी, जो LIBSUFFIX वारिस नहीं है का उपयोग कर रहे हैं। इस प्रकार संकलन समय के दौरान VCL.dcp की आवश्यकता के लिए पर्याप्त है, जबकि VCL160.bpl वास्तव में रनटाइम के दौरान उपयोग किया जाता है। डीसीपी में इसे हल करने के लिए पूर्ण बीपीएल नाम शामिल है।

यह LIBSUFFIX दृष्टिकोण को सरल बनाता है "डेल्फी के प्रत्येक संस्करण के लिए पैकेज का नाम बदलें"।

QC83229 में सुझाए गए समाधान जैसे एक समाधान को नए डेल्फी संस्करण में एक पैकेज पोर्ट करना आसान हो जाएगा, लेकिन फिर भी आप अभी भी डीप्रोजेज़ फ़ाइलों के साथ फंस गए हैं जो पीछे की ओर संगत नहीं हैं।

मैं आमतौर पर प्रत्येक डेल्फी संस्करण के लिए अलग-अलग फ़ोल्डरों का उपयोग करता हूं, जहां केवल प्रोजेक्ट फ़ाइलें संग्रहीत होती हैं। एक नए डेल्फी संस्करण के लिए मुझे केवल एक फ़ोल्डर की प्रतिलिपि बनाना है और LIBSUFFIX को बदलना है।

+0

+1, अच्छा विचार। क्या यह क्यूसीड है? – kludg

+0

@ सर्ग: हाँ, लेकिन समय के लिए निजी। प्रश्न –

+0

पर टिप्पणी देखें मैं समस्या के समाधान के लिए एक प्लगइन बना रहा हूं जैसा हम बोलते हैं! – LaKraven

3

LIBSUFFIX निर्देश * .dpk फ़ाइल में है, और आप * .dpk फ़ाइल मैन्युअल रूप से संपादित कर सकते हैं।

आप उदाहरण

{$IFDEF CONDITIONALEXPRESSIONS} 
    {$IF CompilerVersion = 20.0} 
{$LIBSUFFIX '120'} 
    {$IFEND} 
    {$IF CompilerVersion = 21.0} 
{$LIBSUFFIX '140'} 
    {$IFEND} 
{$ENDIF} 

के लिए, लिख सकते हैं बुरी बात है कि आईडीई * .dpk फ़ाइल के अपने मैन्युअल संपादन सम्मान नहीं करता है और उन्हें हटा देता है तो आप एक पैकेज में परिवर्तन करें। यही कारण है कि कुछ घटक विक्रेता * .dpk फ़ाइल में सशर्त परिभाषा का उपयोग करते हैं, यदि परिवर्तनों को सहेजने के लिए कहा जाता है तो 'स्थापना' कहने के लिए कहा गया है।

+0

संपत्ति नाम 'DllSuffix' के तहत .dproj फ़ाइल में भी संग्रहीत किया गया है। मुझे नहीं पता कि कौन सी सेटिंग जीतती है और क्यों इसे डुप्लिकेट किया जाता है। –

+0

साथ ही, यह निर्देश पैकेज स्रोत के बहुत नीचे होना चाहिए क्योंकि सिस्टम 'शामिल' के अंत तक दायरे में नहीं है। – OnTheFly

+5

डेल्फी में पूरा पैकेज स्थापना एक नरक है। डेल्फी 7 के साथ आपके पास पैकेज जानकारी (* .dpk और * .res) के लिए 2 फाइलें हैं, अब आपके पास डुप्लिकेशंस के साथ 3 फ़ाइलें हैं, हालांकि 1 फ़ाइल पर्याप्त से अधिक है। दुर्भाग्य से Embarcadero परवाह नहीं है। – kludg

2

मेरा सुझाव यह प्रोजेक्ट विकल्प सेट के लिए कॉन्फ़िगर करने योग्य विकल्प के रूप में जोड़ना होगा (QC#86491 देखें।) सभी संकुल को अद्यतन करने के बजाय यह एक विकल्प सेट फ़ाइल को अद्यतन करने के लिए पर्याप्त होगा।

वास्तव में, ऐसा लगता है कि DllSuffix टैग डेल्फी XE/XE2 में सेट सेट फ़ाइलों द्वारा पहचाना जाता है। <DllSuffix>160</DllSuffix> को <PropertyGroup> विकल्प विकल्प फ़ाइल के अनुभाग में जोड़ने से प्रोजेक्ट मैनेजर में पैकेज में प्रत्यय को जोड़ा जाएगा। हालांकि, आपको अभी भी प्रोजेक्ट विकल्प खोलना होगा और इसे .dpk फ़ाइल में सहेजने के लिए ठीक क्लिक करना होगा।

मैं मानता हूँ कि यह इस सुविधा के साथ अत्यंत उपयोगी होगा (मैं RTL में संकुल के लिए भी लगता होगा।)

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