Xcode Build Settings में "Architectures" और "Valid Architectures" में क्या अंतर है?


112

उनका क्या अर्थ है और क्या मैं उन्हें विभिन्न मूल्यों में स्थापित कर सकता हूं?

जवाबों:


113

आर्किटेक्चर वे हैं जिन्हें आप बनाना चाहते हैं, वैध आर्किटेक्चर वे हैं जो आप अपने कोडबेस के साथ निर्माण कर सकते हैं।

तो शायद आप केवल armv7s के लिए अपना बाइनरी बनाना चाहते हैं, लेकिन समान स्रोत कोड armv7 और armv6 के लिए ठीक संकलित करेगा। तो VALID_ARCHS = armv6 armv7 armv7s, लेकिन आप सेट करते हैं ARCHS = armv7sक्योंकि यह सब आप वास्तव में अपने कोड के साथ बनाना चाहते हैं

या, Apple-ese में:

ARCHS (आर्किटेक्चर)

पहचानकर्ताओं की अंतरिक्ष-पृथक सूची। उन आर्किटेक्चर (ABI, प्रोसेसर मॉडल) को निर्दिष्ट करता है जिनसे बाइनरी को लक्षित किया जाता है। जब यह बिल्ड सेटिंग एक से अधिक आर्किटेक्चर को निर्दिष्ट करती है, तो उत्पन्न बाइनरी में प्रत्येक निर्दिष्ट आर्किटेक्चर के लिए ऑब्जेक्ट कोड हो सकता है।

तथा:

VALID_ARCHS (मान्य आर्किटेक्चर)

पहचानकर्ताओं की अंतरिक्ष-पृथक सूची। उन आर्किटेक्चर को निर्दिष्ट करता है जिनके लिए बाइनरी का निर्माण किया जा सकता है। निर्माण के दौरान, यह सूची ARCHS बिल्ड सेटिंग के मूल्य के साथ प्रतिच्छेद की जाती है; परिणामी सूची उन आर्किटेक्चर को निर्दिष्ट करती है जिन पर बाइनरी चल सकती है। यदि परिणामस्वरूप आर्किटेक्चर सूची खाली है, तो लक्ष्य कोई बाइनरी उत्पन्न नहीं करता है।

स्रोत: Xcode बिल्ड सेटिंग संदर्भ

व्यवहार में, आप VALID_ARCHSअकेले छोड़ देते हैं और इसे बदलने के बारे में चिंता नहीं करते हैं, और केवल ARCHSउन आर्किटेक्चर को सेट करना चाहते हैं जिन्हें आप बनाना चाहते हैं। आमतौर पर, आप एक डीबग बिल्ड को बस सेट करते हैं NATIVE_ARCH, क्योंकि आप केवल उस मशीन के लिए डीबग संस्करण बनाना चाहते हैं जिसे आप परीक्षण कर रहे हैं / उस पर चल रहे हैं, और रिलीज़ आपके द्वारा समर्थित आर्किटेक्चर के पूर्ण स्पेक्ट्रम के लिए बनाता है।


1
@DanMoore "परिणामी वास्तुकला सूची" का निर्माण समय पर स्मृति में किया जाता है।
सल्टम्यूले

3
@ onmyway133 अधिकांश समय, आप VALID_ARCHS नहीं चाहते हैं। यदि आप केवल कुछ आर्किटेक्चर के लिए इनलाइन asm लिख रहे थे, तो आप यह दर्शाने के लिए VALID_ARCHS बदल सकते हैं कि आपका कोड अब किसी भी आर्किटेक्चर के लिए नहीं है। अधिकतर, हालाँकि, यह सिर्फ Xcode से आपके लिए एक संकेत है जो यह बताता है कि यह किस आर्किटेक्चर के लिए निर्माण कर सकता है, और आप अपने ARCHS के लिए वहाँ से चुनें।
जेरेमी डब्ल्यू। शेरमेन

4

Apple दस्तावेज़ से, हम जानते हैं कि द्विआधारी Xcode का निर्माण सूची Valid Architectures के साथ प्रतिच्छेद होगा Architectures

इसलिए, मुझे नहीं लगता कि जेरेमी का जवाब सही है, जैसा कि वह कहता है:

तो शायद आप केवल armv7s के लिए अपना बाइनरी बनाना चाहते हैं, लेकिन समान स्रोत कोड
armv7 और armv6 के लिए ठीक संकलित करेगा । इसलिए VALID_ARCHS = armv6 armv7 armv7s, लेकिन आप ARCHS = armv7s सेट करते हैं, क्योंकि आप वास्तव में अपने कोड के साथ निर्माण करना चाहते हैं।

जब आप सेट करते हैं VALID_ARCHS = armv6 armv7 armv7s, और सेट करते हैं ARCHS = armv7s, तो बाइनरी एक्सकोड का निर्माण armv7s होगा arm यह armv6 / armv7 के साथ संगत नहीं हो सकता है।

और अगर आप armv6 / armv7 / armv7s के साथ संगत करना चाहते हैं compatible आपको सेट करना होगा VALID_ARCHS = armv6 armv7 armv7sऔर ARCHS = armv6। इस तरह, बाइनरी Xcode का परिणाम armv6 होगा, और यह armv6 / armv7 / armv7s दोनों पर ठीक चल सकता है क्योंकि आर्म प्रोसेसर बैकवर्ड है। ।


1
वह सही था: "क्योंकि वह सब आप वास्तव में अपने कोड के साथ बनाना चाहते हैं ।"
लेज़्ज़ो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.