Come definire un simbolo del preprocessore in Xcode

È ansible impostare un simbolo per la compilazione condizionale impostando le proprietà in un progetto Xcode?

Il mio objective è creare un simbolo disponibile per tutti i file, senza dover utilizzare import / include, in modo che un insieme di classi comuni possa avere un comportamento speciale in alcuni progetti. Mi piace il seguente, ma con i miei simboli.

#if TARGET_IPHONE_SIMULATOR ... #endif 

Vai alle impostazioni Target o Progetto, fai clic sull’icona a forma di ingranaggio in basso a sinistra e seleziona “Aggiungi impostazioni definite dall’utente”. Il nuovo nome dell’impostazione deve essere GCC_PREPROCESSOR_DEFINITIONS e puoi digitare le tue definizioni nel campo a destra.

Per i commenti di Steph, la syntax completa è:

 constant_1=VALUE constant_2=VALUE 

Nota che non hai bisogno dei ‘=’ se vuoi solo # definire un simbolo, piuttosto che dargli un valore (per #ifdef istruzioni #ifdef )

Non è necessario creare un’impostazione definita dall’utente. L’impostazione integrata “Macro preprocessore” funziona bene. alt text http://idisk.mac.com/cdespinosa/Public/Picture%204.png

Se si dispone di più target o progetti che utilizzano lo stesso file prefisso, utilizzare invece Macro preprocessore non utilizzate nelle intestazioni precompilate, pertanto le differenze nella definizione macro non triggersno un set aggiuntivo non necessario di intestazioni precompilate.

Come addendum, se stai usando questa tecnica per definire stringhe nel tuo target, questo è il modo in cui ho dovuto definirle e usarle:

In Impostazioni di compilazione -> Macro di preprocessore, e le barre rovesciate di tipo yes sono fondamentali nella definizione:

 APPURL_NSString=\@\"www.foobar.org\" 

E nel codice sorgente:

 objectManager.client.baseURL = APPURL_NSString; 

È ansible utilizzare il file *_Prefix.pch per dichiarare macro a livello di progetto. Quel file è di solito nel tuo gruppo Other Sources .

È in “Preprocessing GCC 4.2” (o semplicemente “prepro” nella casella di ricerca) …

… tuttavia, per la vita di me non riesco a farlo funzionare.

Ho le mie configurazioni standard di debug e release e voglio definire DEBUG = 1 nella configurazione di debug. Ma dopo averlo aggiunto come valore:

(nella finestra delle impostazioni)> Macro preprocessore: DEBUG = 1

 #if DEBUG printf("DEBUG is set!"); #endif 

… non stampa mai / viene chiamato. Mi sta facendo diventare pazzo…

In risposta al commento di Kevin Laity (vedi la risposta di cdespinosa), sulla sezione di Preelaborazione GCC non mostrata nelle impostazioni di compilazione, rendere Active SDK quello che dice (SDK di base) dopo di esso e questa sezione apparirà. Puoi farlo selezionando il menu Progetto> Imposta target attivo> XXX (SDK di base). In diverse versioni di XCode (Base SDK) può essere diverso, ad esempio (Impostazione progetto o Predefinito progetto).

Dopo aver visualizzato questa sezione, è ansible aggiungere le proprie definizioni a Processor Macros anziché creare un’impostazione definita dall’utente.

Per il progetto Xcode 9.4.1 e C ++. Aggiunta di const char* Macro di preprocessore a build di debug e release .

  1. Seleziona il tuo progetto

    seleziona progetto

  2. Seleziona Impostazioni di costruzione

    seleziona le impostazioni di compilazione

  3. Cerca ” Macro preprocessore

    search1 Search2

  4. Apri la lista intertriggers

    apri l'elenco interattivo

  5. Aggiungi i tuoi macros e non dimenticare di evadere dalla citazione

    aggiungi percorso

  6. Utilizzare nel codice sorgente come const char* comune const char*

     ... #ifndef JSON_DEFINITIONS_FILE_PATH static constexpr auto JSON_DEFINITIONS_FILE_PATH = "definitions.json"; #endif ... FILE *pFileIn = fopen(JSON_DEFINITIONS_FILE_PATH, "r"); ... 

È ansible duplicare la destinazione che ha la sezione di pre-elaborazione, rinominarla con qualsiasi nome desiderato e quindi modificare il valore della macro Preprocessore.