2015-02-02 19 views
8

Oluşturma işleminde ld komutunun argümanlarının ne olacağını "komut dosyası oluşturma aşaması" olarak çalışan bir betik içinden nasıl belirleyebilirim?xcode run betiği oluşturma aşamasından ld komut argümanlarını belirleme

xcodebuild -dry-run'a bir seçenek olarak bakıyordum, ancak daha sonra bunu sağladığım argümanların ne olması gerektiğini anlamanız gerekiyor.

Güçlü bir çözüm için herhangi bir fikrin var mı?

DÜZENLEME:

Projenin hızlı kaynak kodu içerdiğinde xcodebuild LD ve LDPLUSPLUS desteklemediği görünüyor. Bu yüzden, sunulan @fpotter çözümü, proje ile hızlı çalışmaz.

Herhangi bir düşünce?

cevap

5

Xcode bunu yapmak için iyi bir yol göstermiyor. Çalıştır Komut Dosyası Çalıştır Komut Dosyası Yapılandırma aşamasında, üzerinde çalışmanız gereken tek şey, ortamda size sağlanan Xcode yapı ayarlarıdır.

Bağımsız değişken listesinin tamamını ld'a gerçekten ihtiyacınız varsa, kullanabileceğiniz bir kesmek vardır. LD ve LDPLUSPLUS yapı ayarlarıyla, Xcode'un gerçek ld yerine kendi komut dosyanızı çağırmasını sağlayabilirsiniz. Bu komut dosyasından, arkıları yakalayabilir, gerçek linker’i arayabilir ve daha sonra Run Script oluşturma aşamasından ziyade orada beğendiğiniz her türlü işlemi yapabilirsiniz.

sizin hedef için bir .xcconfig oluşturun: Burada

bunu yapabilirdi nasıl.

Bu gibi görünmelidir: projenizin dizinine

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

SRCROOT puan. LDPLUSPLUS hattı, yalnızca uygulamanızın C++ veya ObjC++ kodu varsa gereklidir. Bir xcconfig oluşturmak istemiyorsanız, bunları Xcode UI aracılığıyla Kullanıcı Tanımlı derleme ayarları olarak da ekleyebilirsiniz.

Xcode'un çağırmak üzere sarıcı komut dosyaları oluşturun.

<your project root>/ld-wrapper/wrapper.sh de böyle bir senaryo yükleyin:

#!/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." 

++ clang ve clang sarıcı komut dosyası için sembolik oluşturun: bu kadar

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

. Çirkin, ama işe yarıyor.

+0

Teşekkürler @fpotter, SO. LD değişken yaklaşımının ilginç olduğunu düşünüyorum. Neden xcodebuild -dry-run' sonucunu ayrışamıyorum? – ekeren

+0

"Kuru çalışma" çıktısını kesinlikle ayrıştırabilirsiniz. Ancak, bir Run Script içinden xcodebuild 'kuru çalıştırma' ile çağırmak yavaş olacaktır. Sadece kuru çalışma yapsa bile, xcodebuild projelerinizi açmak ve inşa etmeye hazırlanmak için çok zaman harcıyor. Gerçekten büyük projelerde, sadece kuru çalışma yapmak için bir dakikadan fazla sürebilir. – fpotter

+1

projenizde hızlı kod bulunduğunda xcode'un LD ve LDPLUSPLUS değişkenini neden göz ardı ettiğine dair bir ipucunuz var mı? – ekeren

İlgili konular