मैं 3 विकल्प के बारे में सोच सकते हैं:
पर्यावरण चर: आप कमांड लाइन से निर्माण यदि आप निर्माण आदेश लागू करने से पहले एक चर (export ENVMACRO=superfoo
) निर्यात और एक Xcode विन्यास फाइल OTHER_CFLAGS=-DMACRO=$(ENVMACRO)
में इसका इस्तेमाल कर सकते हैं। आपको .xcconfig
फ़ाइल के साथ लक्ष्य को कॉन्फ़िगर करने की आवश्यकता है।
रन स्क्रिप्ट बिल्ड चरण: कस्टम स्क्रिप्ट जो हेडर फ़ाइल उत्पन्न करती है।
MACROVALUE=$(run-command-to-obtain-value)
echo "#define MACRO ($MACROVALUE)" > $(SRCROOT)/path/to/header.h
मेरे परीक्षणों में आपको ठीक से संकलित करने में सक्षम होने के लिए एक खाली शीर्षलेख फ़ाइल की आवश्यकता है। sed
या किसी अन्य कमांड का उपयोग कर मौजूदा फ़ाइल को संशोधित करने जैसे अन्य विकल्प हैं।
कस्टम बिल्ड नियम: कस्टम स्क्रिप्ट जो इनपुट फ़ाइल को संसाधित करती है और आउटपुट फ़ाइल बनाता है। के समान रन स्क्रिप्ट बिल्ड चरण लेकिन थोड़ा बेहतर है क्योंकि यह केवल तब ही स्क्रिप्ट चलाएगा जब इनपुट फ़ाइल संशोधित की गई हो। उदाहरण के लिए, .macro
फ़ाइल बनाएं और इसे हेडर फ़ाइल अपडेट करने के लिए संसाधित करें।
एक्सकोड> लक्ष्य> नियम बनाएं, नया कस्टम नियम जोड़ें।
प्रक्रिया: *.macro
कस्टम स्क्रिप्ट:
HEADER="${SRCROOT}/Config.h"
cd ${SRCROOT}
echo "// Do not edit" > $HEADER
cat "${INPUT_FILE_PATH}" | while read line
do
macro="`echo $line | cut -d= -f1`"
cmd="`echo $line | cut -d= -f2-`"
value=$($cmd)
echo "#define ${macro} @\"${value}\"" >> $HEADER
done
echo "// Updated on "`date` >> $HEADER
आउटपुट फ़ाइलों: $(SRCROOT)/Project.h
Project.macro
जोड़े MACRO=one-liner-command
शामिल हैं।इन दो गैर भावना उदाहरण की तरह:
COMMIT=git log --pretty=format:%h -n 1
BUILDYEAR=date +%Y
जनरेट किया गया फ़ाइल तरह दिखेगा:
// Do not edit
#define COMMIT @"c486178"
#define BUILDYEAR @"2011"
// Updated on Sat Oct 29 14:40:41 CEST 2011
हर बार Project.macro
परिवर्तन, उत्पन्न हैडर अद्यतन किया जाएगा।
धन्यवाद - दूसरा विकल्प अनिवार्य रूप से है जो मैंने साथ किया है - मेरे मामले में, मैं चाहता था कि प्रत्येक बिल्ड में कमांड चलाने के लिए। एकमात्र झुर्रियां यह है कि मैं वास्तविक हेडर फ़ाइल पर नहीं लिखता अगर इसकी सामग्री नई जेनरेट की गई सामग्री (निर्भरता परिवर्तन से बचने के लिए) के समान नहीं है। मैं विशेष रूप से तीसरे विकल्प की तरह करता हूं। – michael