2009-09-08 17 views
38

Używam plików Xcode i .xcconfig. Próbuję dodać niektóre wartości do definicji preprocesora, ale po prostu nie mogę go uruchomić.Jak dołączyć wartości do zmiennych xcconfig?

Próbowałem następujące (jak również wiele odmian tego), ale nie ma szczęścia do tej pory:

GCC_PREPROCESSOR_DEFINITIONS = '$(GCC_PREPROCESSOR_DEFINITIONS) NEW_VALUE'

NEW_VALUE symbol jest po prostu nigdy nie dodaje się do definicji preprocesora.

Czy ktoś miał sukces dołączając nowe wartości do zmiennych w plikach xcconfig?

Odpowiedz

1

To działa na mnie w Xcode 2.4.1:

 
GCC_PREPROCESSOR_DEFINITIONS = "$(GCC_PREPROCESSOR_DEFINITIONS) NEW_VALUE" 

Trzeba czasami pozwalają kilka sekund między edytując plik konfiguracyjny oraz zmiany pojawiają się w cel Build Info.

+1

Nie ma szczęścia w XCode 3.2 :( –

9

Według Xcode Build System Guide:

Gdy jednostka konfiguracja zawiera więcej niż jedną definicję dla konkretnego ustawienia kompilacji, Xcode wykorzystuje ostatnią definicję w jednostce. Zachowaj , pamiętając, że pliki konfiguracyjne mają nie mają dostępu do ustawień kompilacji definicji zawartych w plikach konfiguracyjnych , które zawierają. Oznacza to, że użytkownik nie może zmodyfikować definicji podanej w załączonego pliku konfiguracyjnego; ty można go tylko zastąpić.

Chyba oznacza to, że nie można dołączać wartości do danej zmiennej.

4

Istnieje another question z odpowiedzią, która może pomóc w tym konkretnym problemie. Opisuje technikę, w której każda warstwa tworzy podzbiór definicji, a następnie łączy je wszystkie na poziomie xcconfig na poziomie liścia.

0

Chcesz użyć symbolu zastępczego $ (odziedziczonego) do reprezentowania wartości odziedziczonej z niższych poziomów, np.

GCC_PREPROCESSOR_DEFINITIONS = "$(inherited) NEW_VALUE" 
+8

To wygląda na idealną odpowiedź, ale jest błędne. '$ (Dziedziczony)' nie działa z plikami xwconfig, w szczególności nie można go użyć do rozszerzenia definicji z załączonego pliku: –

+2

, a następnie, jak rozszerzyć? –

29

Z przyczyn podanych w innych odpowiedziach na to pytanie nie można łatwo dziedziczyć wartości.

Polecam definiowanie ustawień kaskadowo. Załóżmy, że aplikacja jest Twój prefiks projekt i zrobić to proste zdefiniowanie tylko kilka CFLAGS:

platform.xcconfig:

APP_PLATFORM_CFLAGS = -DMAS=1 

project.xcconfig:

#include "platform.xcconfig" 
APP_PROJECT_CFLAGS = -DBETA=1 

docelowego one.xcconfig:

#include "project.xcconfig" 
APP_TARGET_CFLAGS = -DSUPER_COOL=1 
#include "merge.xcconfig" 

target-two.xcconfig:

#include "project.xcconfig" 
APP_TARGET_CFLAGS = -DULTRA_COOL=1 
#include "merge.xcconfig" 

merge.xcconfig:

OTHER_CFLAGS = $(inherited) $(APP_PLATFORM_CFLAGS) $(APP_PROJECT_CFLAGS) $(APP_TARGET_CFLAGS) 

Następnie będziesz oparcie każdego z celów zbudować konfiguracje na target-xxx.xcconfig. Prawdziwy projekt użyje bardziej złożonych konfiguracji, używając pliku konfiguracyjnego dla projektu i innego dla celu, ale masz pomysł.

Należy również pamiętać, że $(inherited) dotyczy wyższy poziomie w hierarchii, nie wcześniej. Na przykład dziedziczy z poziomu projektu na poziomie docelowym. Nie wiem, czy dotyczy to również Xcode 4.

To jest uproszczenie GTM, przejdź tam, aby dowiedzieć się więcej.

6

to działa:

xcodebuild GCC_PREPROCESSOR_DEFINITIONS='$(value) NEW_VALUE' 
+1

Dzięki, po prostu używam 'GCC_PREPROCESSOR_DEFINITIONS = $ (value) NEW_VALUE' chociaż (bez cudzysłowów). – mkeiser

4

myślę, że natknął się na nieco lepszym podejściem, starając się zintegrować Cocoapods xcconfig pliki na własną rękę. Chcę ustawić następujące w moich projektach

GCC_PREPROCESSOR_DEFINITIONS = CONFIGURATION_$(CONFIGURATION) 

Niestety jest to sprzeczne z definicjami, że pochodzi z Pods.xcconfig. Jak podano w innym miejscu $ (dziedziczony) nie działa zgodnie z oczekiwaniami. Co działa jest następujący

GCC_PREPROCESSOR_DEFINITIONS[config=*] = CONFIGURATION_$(CONFIGURATION) $(inherited) 

UPDATE:

Jeśli chcesz nadpisać ustawienie dla danej konfiguracji Wtedy ulec pokusie, aby napisać coś podobnego

GCC_PREPROCESSOR_DEFINITIONS[config=*] = CONFIGURATION_$(CONFIGURATION) $(inherited) 
GCC_PREPROCESSOR_DEFINITIONS[config=Debug] = DEBUG=1 CONFIGURATION_$(CONFIGURATION) $(inherited) 

niestety to won nie działa, ALE umieszczenie drugiej deklaracji w pliku, który tylko zostanie załadowany przez konfigurację debugowania, odpowiednio zastąpi ustawienie.

+0

Składnia' 'GCC_PREPROCESSOR_DEFINITIONS [config = *] = ...' ' działa w Xcode 5. Używałem go w specyficznych dla celu plikach '' .xcconfig'' do dołączania centralnie zdefiniowanych ustawień budowania dla całego projektu do ustawień specyficznych dla celu: '' BLA [config = *] = $ (BLA_TARGET_SPECIFIC) $ (BLA_PROJECT_WIDE) ''. – bassim

Powiązane problemy