2015-02-02 13 views
8

से एलडी कमांड तर्कों को समझें मैं कैसे निर्धारित कर सकता हूं कि "स्क्रिप्ट स्क्रिप्ट बिल्ड चरण" के रूप में चल रहे स्क्रिप्ट के अंदर बिल्ड प्रक्रिया में ld कमांड के तर्क क्या होंगे?एक्सकोड रन स्क्रिप्ट बिल्ड चरण

मैं एक विकल्प के रूप में xcodebuild -dry-run पर देख रहा था, लेकिन फिर मुझे यह समझने की आवश्यकता है कि मैं इसे कौन से तर्कों की आपूर्ति कर सकता हूं।

एक मजबूत समाधान के लिए कोई विचार?

संपादित:

ऐसा लगता है कि xcodebuild एलडी और LDPLUSPLUS का समर्थन नहीं करता जब परियोजना स्विफ्ट स्रोत कोड भी शामिल है। तो समाधान जो @ppotter ने प्रोजेक्ट पर तेजी से काम नहीं किया है।

कोई विचार?

उत्तर

5

एक्सकोड ऐसा करने का एक अच्छा तरीका नहीं दिखाता है। रन स्क्रिप्ट बिल्ड चरण में, आपको पर्यावरण में प्रदान की गई एक्सकोड बिल्ड सेटिंग्स के साथ काम करना होगा।

यदि आपको वास्तव में ld पर संपूर्ण तर्क सूची की आवश्यकता है, तो आप एक हैक का उपयोग कर सकते हैं। LD और LDPLUSPLUS बिल्ड सेटिंग्स के साथ, आप वास्तविक ld के बजाय एक्सकोड को अपनी खुद की एक स्क्रिप्ट कॉल कर सकते हैं। उस स्क्रिप्ट से, आप तर्कों को कैप्चर कर सकते हैं, असली लिंकर से कॉल कर सकते हैं, और उसके बाद रन स्क्रिप्ट बिल्ड चरण की बजाय आपको जो भी पोस्ट प्रोसेसिंग करना पसंद है।

अपने लक्ष्य के लिए एक .xcconfig बनाएँ:

यहाँ आप कैसे कर सकते हैं कि है।

यह इस तरह दिखना चाहिए:

LD = $(SRCROOT)/ld-wrapper/clang 
LDPLUSPLUS = $(SRCROOT)/ld-wrapper/clang++ 

SRCROOT अपने प्रोजेक्ट की निर्देशिका को इंगित करता है। LDPLUSPLUS लाइन केवल तभी जरूरी है जब आपके ऐप में C++ या ObjC++ कोड हो। यदि आप xcconfig नहीं बनाना चाहते हैं, तो आप एक्सकोड यूआई के माध्यम से इन्हें उपयोगकर्ता-परिभाषित बिल्ड सेटिंग्स के रूप में भी जोड़ सकते हैं।

कॉल करने के लिए एक्सकोड के लिए रैपर स्क्रिप्ट बनाएं।

<your project root>/ld-wrapper/wrapper.sh पर इस तरह एक स्क्रिप्ट स्थापित करें:

#!/bin/bash 

set -o errexit 

# Choose which clang to run (clang or clang++) depending on how we're invoked. 
# If we're invoked via the 'clang' link, we'll run 'clang'. If we're invoked 
# via the 'clang++' link, we'll run 'clang++'. 
CLANG_PATH="$DEVELOPER_DIR"/Toolchains/XcodeDefault.xctoolchain/usr/bin/$(basename "$0") 

"$CLANG_PATH" "[email protected]" 

echo "clang args: [email protected]" 
echo "do any post processing here." 

बजना और बजना के लिए ++ आवरण स्क्रिप्ट के लिए सिमलिंक बनाएँ:

cd <project root>/ld-wrapper 
ln -s wrapper.sh clang 
ln -s wrapper.sh clang++ 

यह है कि। यह बदसूरत है, लेकिन यह काम करता है।

+0

धन्यवाद @ एफपोटर, एसओ में जवाब देने वाले पहले व्यक्ति होने के लिए खुश हैं। मुझे लगता है कि एलडी परिवर्तनीय दृष्टिकोण दिलचस्प है। मैं 'xcodebuild -dry-run' के परिणाम का विश्लेषण क्यों नहीं कर सकता? – ekeren

+0

आप निश्चित रूप से 'शुष्क-रन' के आउटपुट को पार्स कर सकते हैं। लेकिन, एक रन स्क्रिप्ट के भीतर से 'ड्राई-रन' के साथ xcodebuild को कॉल करना धीमा होगा। यहां तक ​​कि अगर केवल सूखे चलते हैं, तो xcodebuild आपकी परियोजनाओं को खोलने और निर्माण करने की तैयारी में बहुत समय व्यतीत करता है। वास्तव में बड़ी परियोजनाओं पर, सूखे चलाने के लिए बस एक मिनट से अधिक समय लग सकता है। – fpotter

+1

क्या आपके पास कोई सुराग है कि क्यों प्रोजेक्ट में स्विफ्ट कोड होने पर एक्सकोड एलडी और एलडीपीएलएसपीएलएएल वैरिएबल को नजरअंदाज करता है? – ekeren

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

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