Est-il possible de définir un symbole pour la compilation conditionnelle en définissant des propriétés dans un projet Xcode?
Mon objectif est de créer un symbole qui soit disponible pour tous les fichiers, sans avoir à utiliser import / include, afin qu'un ensemble de classes communes puisse avoir un comportement particulier dans certains projets. Comme ce qui suit, mais avec mes propres symboles.
#if TARGET_IPHONE_SIMULATOR
...
#endif
objective-c
xcode
c-preprocessor
Steph Thirion
la source
la source
Réponses:
Accédez aux paramètres de votre cible ou de votre projet, cliquez sur l'icône d'engrenage en bas à gauche et sélectionnez "Ajouter un paramètre défini par l'utilisateur". Le nouveau nom de paramètre doit être
GCC_PREPROCESSOR_DEFINITIONS
, et vous pouvez taper vos définitions dans le champ de droite.Selon les commentaires de Steph, la syntaxe complète est:
Notez que vous n'avez pas besoin des '=' si vous voulez juste #define un symbole, plutôt que de lui donner une valeur (pour les
#ifdef
instructions)la source
Vous n'avez pas besoin de créer un paramètre défini par l'utilisateur. Le paramètre intégré «Macros préprocesseur» fonctionne très bien. texte alternatif http://idisk.mac.com/cdespinosa/Public/Picture%204.png
Si vous avez plusieurs cibles ou projets qui utilisent le même fichier de préfixe, utilisez plutôt les macros de préprocesseur non utilisées dans les en-têtes précompilés, afin que les différences dans la définition de votre macro ne déclenchent pas un ensemble supplémentaire inutile d'en-têtes précompilés.
la source
En complément, si vous utilisez cette technique pour définir des chaînes dans votre cible, voici comment j'ai dû les définir et les utiliser:
Dans les paramètres de construction -> Macros de préprocesseur, et oui les barres obliques inverses sont essentielles dans la définition:
Et dans le code source:
la source
Vous pouvez utiliser le
*_Prefix.pch
fichier pour déclarer des macros à l'échelle du projet. Ce fichier se trouve généralement dans votre groupe Autres sources .la source
C'est sous "GCC 4.2 Preprocessing" (ou juste mettre "prepro" dans la boîte de recherche) ...
... cependant, pour la vie de moi, je ne peux pas le faire fonctionner.
J'ai mes configurations de débogage et de libération standard, et je veux définir DEBUG = 1 dans la configuration de débogage. Mais après l'avoir ajouté comme valeur:
(dans la fenêtre des paramètres)> Macros préprocesseur: DEBUG = 1
... n'imprime jamais / est appelé. Ça me rend fou...
la source
#if DEBUG
vie :) stackoverflow.com/a/47395485/2778502En réponse au commentaire de Kevin Laity (voir la réponse de cdespinosa), à propos de la section Prétraitement GCC n'apparaissant pas dans vos paramètres de construction, définissez le SDK actif sur celui qui indique (SDK de base) après cela et cette section apparaîtra. Vous pouvez le faire en choisissant le menu Projet> Définir la cible active> XXX (SDK de base). Dans différentes versions de XCode (SDK de base) peut être différent, comme (Paramètres du projet ou par défaut du projet).
Une fois que cette section apparaît, vous pouvez ajouter vos définitions aux macros de processeur plutôt que de créer un paramètre défini par l'utilisateur.
la source
Pour Xcode 9.4.1 et projet C ++. Ajout de
const char*
macros de préprocesseur aux versions Debug et Release .Sélectionnez votre projet
Sélectionnez Paramètres de construction
Rechercher " Macros de préprocesseur "
Ouvrir la liste interactive
Ajoutez vos macros et n'oubliez pas d'échapper à la citation
Utilisation courante dans le code source
const char*
la source
Vous pouvez dupliquer la cible qui a la section de prétraitement, la renommer en n'importe quel nom souhaité, puis modifier la valeur de votre macro de préprocesseur.
la source