48 votes

Comment ajouter des valeurs dans les variables xcconfig ?

J'utilise Xcode et les fichiers .xcconfig. J'essaie d'ajouter certaines valeurs dans les définitions du préprocesseur, mais je n'arrive pas à le faire fonctionner.

J'ai essayé ce qui suit (ainsi que de nombreuses variantes), mais sans succès jusqu'à présent :

GCC_PREPROCESSOR_DEFINITIONS = '$(GCC_PREPROCESSOR_DEFINITIONS) NEW_VALUE'

El NEW_VALUE n'est tout simplement jamais ajouté aux définitions du préprocesseur.

Est-ce que quelqu'un a réussi à ajouter de nouvelles valeurs aux variables dans les fichiers xcconfig ?

36voto

djromero Points 11713

Pour les raisons mentionnées dans d'autres réponses à cette question, vous ne pouvez pas hériter facilement des valeurs.

Je recommande de définir vos paramètres en cascade. Supposons que APP soit le préfixe de votre projet et rendons cela simple en définissant seulement quelques CFLAGS :

plate-forme.xcconfig :

APP_PLATFORM_CFLAGS = -DMAS=1

projet.xcconfig :

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

target-one.xcconfig :

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

cible-deux.xcconfig :

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

fusionner.xcconfig :

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

Ensuite, vous baserez chacune des configurations de construction de vos cibles sur target-xxx.xcconfig . Un projet réel utilisera des configurations plus complexes, utilisant un fichier de configuration pour le projet et un autre pour la cible, mais vous avez compris l'idée.

N'oubliez pas non plus que $(inherited) se réfère à plus haut niveau de la hiérarchie, et non plus tôt . Par exemple, il hérite du niveau Projet au niveau Cible. Je ne sais pas si cela s'applique également à Xcode 4.

Il s'agit d'une simplification de GTM Pour en savoir plus, rendez-vous sur ce site.

10voto

Martin Cote Points 12762

Selon le guide du système de construction Xcode :

Lorsqu'une unité de configuration contient plus d'une définition pour une pour un paramètre de construction particulier, Xcode utilise la dernière définition dans l'unité. Gardez garder à l'esprit que les fichiers de configuration n'ont pas accès aux définitions de construction faites dans les fichiers qu'ils incluent. En d'autres termes, vous ne pouvez pas modifier la définition faite dans dans un fichier de configuration inclus ; vous vous pouvez seulement la remplacer.

Donc, je suppose que cela signifie qu'il n'est pas possible d'ajouter des valeurs à une variable donnée.

9voto

Laxman Battini Points 51

Ça marche :

xcodebuild GCC_PREPROCESSOR_DEFINITIONS='$(value) NEW_VALUE'

2 votes

Merci, j'utilise simplement GCC_PREPROCESSOR_DEFINITIONS=$(value) NEW_VALUE mais (sans guillemets).

4voto

fbrereto Points 21711

Il y a une autre question avec une réponse qui pourrait aider avec ce problème particulier. Il décrit une technique qui permet à chaque couche de composer un sous-ensemble de définitions, puis de les rassembler au niveau de la feuille xcconfig.

4voto

James Moore Points 174

Je pense être tombé sur une approche légèrement meilleure en essayant d'intégrer les fichiers xcconfig de Cocoapods dans les miens. J'aime définir les éléments suivants dans mes projets

GCC_PREPROCESSOR_DEFINITIONS = CONFIGURATION_$(CONFIGURATION)

Malheureusement, cela entre en conflit avec les définitions fournies avec Pods.xcconfig. Comme indiqué ailleurs, $(inherited) ne fonctionne pas comme prévu. Ce qui fonctionne, c'est ce qui suit

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

UPDATE :

Si vous avez besoin de remplacer un paramètre pour une configuration particulière, vous serez tenté d'écrire quelque chose comme

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

Malheureusement, cela ne fonctionnera pas, mais en plaçant la deuxième déclaration dans un fichier qui n'est chargé que par la configuration Debug, le paramètre sera correctement remplacé.

0 votes

El GCC_PREPROCESSOR_DEFINITIONS[config=*] = ... fonctionne dans Xcode 5. Je l'ai utilisé dans la cible spécifique .xcconfig pour ajouter les paramètres de construction définis de manière centralisée pour l'ensemble du projet aux paramètres spécifiques à la cible : BLA[config=*] = $(BLA_TARGET_SPECIFIC) $(BLA_PROJECT_WIDE) .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X