È 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 .
Seleziona il tuo progetto
Seleziona Impostazioni di costruzione
Cerca ” Macro preprocessore ”
Apri la lista intertriggers
Aggiungi i tuoi macros e non dimenticare di evadere dalla citazione
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.