2012-01-09 19 views
7

मैं वर्तमान में जीसीसी में अपनी परियोजनाओं में से एक को पोर्ट कर रहा हूं, और मैं इसे पूरा करने के लिए मिनीजीडब्ल्यू-डब्ल्यू 64 प्रोजेक्ट का उपयोग कर रहा हूं क्योंकि मुझे x64 और x86 समर्थन दोनों की आवश्यकता है।सी ++ मिनगब्लू-डब्ल्यू 64 और बूस्ट का उपयोग कर पर्यावरण बनाएं। बिल्ड

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

तहत MSVC इस ठीक है, क्योंकि मैं कमांड लाइन से निम्न कर सकते हैं:, के रूप में 32-बिट और 64-बिट toolchains रखे जाते हैं

b2 toolset=msvc address-model=32 # compile as 32-bit 
b2 toolset=msvc address-model=64 # compile as 64-bit 

MinGW-W64 इस 'समस्या पैदा करने वाले' बना रही है अलग निर्देशिका में। (सी: \ MinGW32 और सी: क्रमशः \ MinGW64)।

क्या बूस्ट.बिल्ड स्थापित करना संभव है जिससे यह पता-मॉडल ध्वज के आधार पर सही टूलचेन का चयन करेगा? यदि नहीं, तो मेरा अगला सबसे अच्छा विकल्प क्या है?

संपादित करें:

यदि यह मदद करता है, मैं rubenvb 4.6.3-1 में MinGW-W64 वेबसाइट से बनाता उपयोग कर रहा हूँ "व्यक्तिगत बनाता है" फ़ोल्डर (मैं उपयोग कर रहा हूँ इन विशेष रूप से बनाता है मैं करना चाहते हैं के रूप में मेरे कोड को पार्स करने का प्रयास करें - लेकिन संकलित नहीं - क्लैंग के तहत)।

संपादित करें:

एक समाधान मैं बस के बारे में सोचा के लिए 'मैन्युअल' संकलन से पहले सही toolchain को इंगित करने के पथ सेट, लेकिन इस जटिलता के एक अतिरिक्त परत अपने निर्माण की प्रक्रिया के लिए कहते हैं हो सकता है जो मैं था से बचने के लिए। आदर्श रूप से मैं इसे एमएसवीसी के लिए जितना आसान बनाना चाहूंगा, हालांकि मुझे लगता है कि यह संभव नहीं हो सकता है। सबसे बुरे मामले में मुझे लगता है कि मैंने जो सुझाव दिया है वह काम करेगा, और मुझे बूस्ट.बिल्ड का आह्वान करने से पहले पैथ को सही ढंग से सेट करने के लिए स्क्रिप्ट जोड़ना होगा। इसका मतलब यह होगा कि मैं पथ को हार्डकोड करना चाहता हूं, जो मैं नहीं करना चाहता ...

उत्तर

5

यो कोई भी बूस्ट बना सकता है। टूल टूल्स (toolset.add-requirements नियम के साथ) जोड़कर गुणों के सेट के आधार पर बुल्ड टूलसेट का चयन किया जा सकता है। कुछ टूलसेट्स में darwin.jam (एक्सकोड) जैसे इसके लिए अंतर्निहित समर्थन है, लेकिन दुर्भाग्यवश हमने इसे अभी तक gcc टूलसेट में नहीं जोड़ा है। लेकिन टूलसेट घोषित करते समय आप अपने user-config.jam में एक ही न्यूनतम कोड का उपयोग कर सकते हैं।आप मामले के लिए यह इस प्रकार दिखाई देंगे:

import toolset ; 

using gcc : gcc-4.6.3~32 : /path/to/32bit/mingw/gcc ; 
using gcc : gcc-4.6.3~64 : /path/to/64bit/mingw/gcc ; 

# Add a global target requirements to "choose" the toolset based on the address model. 
toolset.add-requirements <toolset>gcc-4.6.3~32:<address-model>32 ; 
toolset.add-requirements <toolset>gcc-4.6.3~64:<address-model>64 ; 

यह सब लक्ष्य को दी सशर्त आवश्यकता जोड़ने का प्रभाव पड़ता है। जिसकी आवश्यकता एक विशेष घोषित टूलसेट के लिए एक विशेष लक्ष्य का चयन करने का प्रभाव है।

.. उल्लेख करने के लिए क्षमा करें .. भले ही यह दो अलग-अलग टूलसेट घोषणाएं बना रहा हो, डिफ़ॉल्ट अभी भी गतिशील रूप से चुना गया है। एक सामान्य कमांड लाइन का उपयोग करेगा:

b2 toolset=gcc address-model=64 

64 बिट mingw कंपाइलर का उपयोग करने के लिए।

3

चूंकि मिनजीडब्ल्यू बाइनरी के अलग-अलग नाम हैं, इसलिए आपको पथ में बूथ निर्देशिकाएं शामिल करने में सक्षम होना चाहिए और फिर जाम में दो अलग-अलग टूलसेट जोड़ना चाहिए कॉन्फ़िगरेशन फ़ाइल, जहां आप बाइनरी फ़ाइलों के सटीक नाम निर्दिष्ट करते हैं (पथ को छोड़कर)। [संस्करण]: [C++ - संकलन आदेश]:

कॉन्फ़िग फ़ाइल में प्रारूप

जीसीसी के प्रयोग पर आधारित निम्नलिखित जोड़ें [संकलक विकल्पों];

using gcc : 32 : mingw-w32-1.0-bin_i686-mingw ; 
using gcc : 64 : mingw-w64-1.0-bin_i686-mingw ; 

फिर आप इस तरह b2 कॉल करने के लिए सक्षम होना चाहिए:

b2 toolset=gcc-32 
bt toolset=gcc-64 
+0

टूलचैन में उपसर्ग जोड़ने के बिना कुछ ऐसा करने का कोई तरीका है? मैं 'डिफ़ॉल्ट' टूलचेन नाम का उपयोग करना चाहता हूं, और पता-मॉडल ध्वज द्वारा 32/64-बिट भाग का पता लगाया गया है। – RaptorFactor

+0

उदा। बी 2 टूलसेट = जीसीसी एड्रेस-मॉडल = 32 – RaptorFactor

+0

मुझे पता नहीं है कि पता-मॉडल स्पष्ट रूप से mingw-gcc के तर्क के रूप में समर्थित नहीं है। क्या मैं पूछ सकता हूं कि आपके मामले में पता-मॉडल = 32 का उपयोग क्यों बेहतर है? – Kristofer

0

MinGW-W64 32 और 64 बिट binaries निर्माण कर सकते हैं।

मैं mingw64 टूलचन के साथ tdm-mingw का उपयोग करता हूं और केवल चयन करने के लिए लिंकर/कंपाइलर को -m32 या -m64 पास करता हूं। डिफ़ॉल्ट रूप से 64 बिट्स बाइनरी बिल्ड कर रहे हैं।

+0

दुर्भाग्यवश सभी MinGW नहीं -w64 बिल्ड ऐसा कर सकता है। जैसा कि पहले से ही मेरे प्रश्न में बताया गया है, मैं rubenvb द्वारा बिल्ड का उपयोग कर रहा हूं जो multilib नहीं हैं, इसलिए मेरे पास दो इंस्टॉलेशन हैं, 32-बिट टूलचेन के लिए एक और 64-बिट टूलचेन के लिए एक है। 64-बिट टूलचेन केवल 64-बिट बाइनरी बना सकता है, और 32-बिट टूलचेन केवल 32-बिट बाइनरी बना सकता है। – RaptorFactor