2013-03-29 11 views
8

में कमांड लाइन से #define सेट करना मैं xcodebuild का उपयोग करके कमांड लाइन बनाने के दौरान और कोई भाग्य नहीं होने पर #define मैक्रो सेट करने का प्रयास कर रहा हूं।xcode 4.6

मैंने -DMYMACRO=1 और MYMACRO=1 की कोशिश की है जो कुछ भी मैं सोच सकता हूं और कुछ भी काम नहीं करता है।

आप कमांड लाइन से #define कैसे सेट करते हैं?

उत्तर

25

रोजर,

क्या आप देख रहे हैं कमांड लाइन टूल xcodebuild के माध्यम से GCC_PREPROCESSOR_MACROS स्थापित करने के लिए एक तरीका है। xcodebuild के लिए आदमी पृष्ठ से पता चलता इन सेटिंग्स लागू करने के लिए प्रारूप, तथापि SYNOPSIS अनुभाग केवल के रूप में इस का अर्थ है "सेटिंग = मूल्य ..."

xcodebuild [-project projectname] -scheme schemename [-configuration configurationname] [-sdk [sdkfullpath | sdkname]] [buildaction ...] [setting=value ...] [-userdefault=value ...] 
xcodebuild -workspace workspacename -scheme schemename [-configuration configurationname] [-sdk [sdkfullpath | sdkname]] [buildaction ...] [setting=value ...] [-userdefault=value ...] 

अंत में, आप किसी भी निर्धारित करने की क्षमता है इस प्रारूप का उपयोग करके और वास्तविक बिल्ड सेटिंग नाम को जानकर आप कमांड लाइन पर बिल्ड सेटिंग्स मानों को सीधे बदलना चाहते हैं। स्वाभाविक रूप से, यह सवाल उठाता है ...

बिल्ड सेटिंग नाम कैसे ढूंढें?

खुशी आपने पूछा! वास्तविक कमांड लाइन बिल्ड सेटिंग नाम खोजने के लिए एक्सकोड 4 की साइडबार सबसे आसान जगह है।

Annotated Build Settings Screen Clip

जब एक निर्माण की स्थापना नाम की तलाश में, Xcode 4 की उपयोगिता साइडबार के त्वरित इंस्पेक्टर सहायता की तलाश में जाने के लिए जगह है।

  1. अपनी परियोजना की बिल्ड सेटिंग्स स्क्रीन तक पहुंचें।
  2. एक्सकोड के ऊपरी दाएं कोने में ऑर्गनाइज़र बटन के बगल में 'उपयोगिता' बटन पर क्लिक करके साइडबार सुनिश्चित करें (क्या एक्सकोड कॉल 'यूटिलिटीज') क्लिक करें।
  3. उपयोगिता साइडबार के भीतर, सुनिश्चित करें कि 'त्वरित सहायता निरीक्षक' दिखाई दे रहा है।

वैकल्पिक रूप से, उपयोग विकल्प + कमांड + 2 त्वरित सहायता इंस्पेक्टर सीधे दिखाने के लिए!

  1. या तो निर्माण जिस सेटिंग को बदलना या निर्माण सेटिंग्स की सूची स्क्रॉल करना चाहते हैं के लिए खोज करें:

अंत में आप अपने निर्माण सेटिंग खोजने के लिए तैयार हैं।

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

    GCC_PREPROCESSOR_DEFINITIONS

    इस वापस एक साथ अपने मूल प्रश्न के पुलिंग, तो आप इस बिल्ड सेट कर सकते हैं अपने शेष xcodebuild कमांड के साथ SETTING_NAME = 'DESIRED_VALUE' प्रदान करके कमांड लाइन पर सेट करना। एक त्वरित छोटे से परीक्षण परियोजना के मामले में मैं एक साथ 'TestApp' मैं कहाँ प्रीप्रोसेसर मैक्रो 'BKM' मान 1 पर सेट किया जा करना चाहता था बुलाया फेंक दिया, मेरे xcodebuild कमांड यह होगी:

    xcodebuild -Project TestApp.xcodeproj - योजना TestApp GCC_PREPROCESSOR_DEFINITIONS = '$ {विरासत में मिला} BKM = 1'

    तुम क्यों रहना था $ वहाँ में {विरासत में मिला}?

    यदि आप प्रीप्रोसेसर मैक्रोज़ का उपयोग कर रहे हैं तो आपके पास संभवतः एक से अधिक का उपयोग कर रहे हैं। जिनमें से कुछ आप कमांड लाइन से नहीं बदलना चाहते हैं, लेकिन फिर भी लक्ष्य या प्रोजेक्ट की बिल्ड सेटिंग्स में कोड किया गया है। '$ {विरासत}} का उपयोग xcodebuild निर्देशों को केवल xcodebuild कमांड में परिभाषित करने के बजाय उच्च स्तर पर परिभाषित बिल्ड सेटिंग्स का उपयोग करने के लिए करता है। ज्यादातर मामलों में आप अपने द्वारा सेट किए गए किसी अन्य कॉन्फ़िगर किए गए मानों को खींचने के लिए $ {विरासत} का उपयोग करना चाहेंगे।

    क्या मुझे एस्ट्रोफ़ेस में मूल्य लपेटना है?

    यदि आप एक से अधिक मान सेट करना चाहते हैं, तो हाँ आपको एस्ट्रोफ़ेस में मान लपेटने की आवश्यकता होगी अन्यथा यदि आप कमांड लाइन से दो या दो से अधिक प्रीप्रोसेसर मैक्रोज़ सेट करते हैं, तो दूसरा + मैक्रो एक बिल्ड सेटिंग के रूप में व्याख्या किया जाएगा एक प्रीप्रोसेसर मैक्रो के बजाय ... बिल्कुल सही व्यवहार नहीं है। Apostrophes एक साथ सेटिंग के लिए कई मान एकत्र करने के लिए एक तरीका के रूप में कार्य करते हैं। मेरे नमूना xcodebuild कमांड के मामले में, मैं xcodebuild को अपने विशिष्ट बीकेएम सेटिंग के साथ प्रीप्रोसेसर मैक्रोज़ के विरासत सेट का उपयोग करना चाहता था, इसलिए मैंने प्रीप्रोसेसर मैक्रोज़ के रूप में उनका इलाज करने के लिए एक्सकोडबिल्ड को बताने के लिए एस्ट्रोफ़ेस में मान लपेट लिया।

    क्या यह वर्कस्पेस के साथ भी काम करेगा?

    बिल्कुल! - प्रोजेक्ट पैरामीटर के बजाय -workspace पैरामीटर का उपयोग करने के लिए बस कमांड को संशोधित करें और आप व्यवसाय में होंगे!

    +1

    नोट: एकल apostrophes का उपयोग करें, डबल नहीं – Quanturium