Hoe een preprocessor-symbool in Xcode te definiëren

Is het mogelijk om een ​​symbool voor voorwaardelijke compilatie in te stellen door eigenschappen in een Xcode-project in te stellen?

Mijn doel is om een ​​symbool te creëren dat beschikbaar is voor alle bestanden, zonder dat ik import/include moet gebruiken, zodat een set gemeenschappelijke klassen een speciaal gedrag kan vertonen in sommige projecten. Zoals het volgende, maar met mijn eigen symbolen.

#if TARGET_IPHONE_SIMULATOR
    ...
#endif

Antwoord 1, autoriteit 100%

Ga naar je doel- of projectinstellingen, klik op het tandwielpictogram linksonder en selecteer ‘Door gebruiker gedefinieerde instelling toevoegen’. De nieuwe instellingsnaam moet GCC_PREPROCESSOR_DEFINITIONSzijn en u kunt uw definities in het rechterveld typen.

Per Steph’s opmerkingen, de volledige syntaxis is:

constant_1=VALUE constant_2=VALUE

Merk op dat u de ‘=’s niet nodignodig hebt als u alleen een symbool #definieert, in plaats van het een waarde te geven (voor #ifdef-instructies )


Antwoord 2, autoriteit 74%

U hoeft geen door de gebruiker gedefinieerde instelling te maken. De ingebouwde instelling “Preprocessor Macro’s” werkt prima.
alt-tekst http://idisk.mac.com/cdespinosa/Public/Picture%204.png

Als je meerdere doelen of projecten hebt die hetzelfde prefixbestand gebruiken, gebruik dan preprocessormacro’s die niet worden gebruikt in vooraf gecompileerde headers, zodat verschillen in je macrodefinitie geen onnodige extra set vooraf gecompileerde headers veroorzaken.


Antwoord 3, autoriteit 35%

Als een addendum, als je deze techniek gebruikt om strings in je doel te definiëren, dan is dit hoe ik ze moest definiëren en gebruiken:

In Build-instellingen -> Preprocessor-macro’s en ja backslashes zijn cruciaal in de definitie:

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

En in de broncode:

objectManager.client.baseURL = APPURL_NSString;

Antwoord 4, autoriteit 4%

U kunt het bestand *_Prefix.pchgebruiken om projectbrede macro’s te declareren.
Dat bestand bevindt zich meestal in de groep Andere bronnen.


Antwoord 5, autoriteit 3%

Het staat onder “GCC 4.2 Preprocessing” (of plaats gewoon “prepro” in het zoekvak)…

…maar ik krijg het voor mijn leven niet werkend.

Ik heb mijn standaard Debug- en Release-configuraties en ik wil DEBUG=1 definiëren in de debugging-configuratie. Maar nadat je het als een waarde hebt toegevoegd:

(in het instellingenvenster) > Preprocessor-macro’s: DEBUG=1

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

…wordt nooit afgedrukt/wordt nooit gebeld. Ik word er gek van…


Antwoord 6, autoriteit 2%

Voor Xcode 9.4.1 en C++-project. Toevoegen van const char*Preprocessor-macro’s aan zowel Debugals Releasebuilds.

  1. Selecteer uw project

    select project

  2. Selecteer Build-instellingen

    selecteer build-instellingen

  3. Zoeken naar “Preprocessor-macro’s

    zoeken1
    zoek2

  4. Interactieve lijst openen

    open interactieve lijst

  5. Voeg uw macro’s toe en vergeet niet om aanhalingstekens te ontsnappen

    pad toevoegen

  6. Gebruik in broncode als algemene 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");
    ...
    

Antwoord 7

Als reactie op de opmerking van Kevin Laity (zie het antwoord van cdespinosa), over de GCC Preprocessing-sectie die niet wordt weergegeven in uw build-instellingen, maakt u de Active SDK degene die erna staat (Base SDK) en deze sectie zal verschijnen. U kunt dit doen door het menu Project > te kiezen. Actief doel instellen > XXX (basis-SDK). In verschillende versies van XCode (Base SDK) misschien anders, zoals (Project Setting of Project Default).

Nadat dit gedeelte verschijnt, kunt u uw definities toevoegen aan processormacro’s in plaats van een door de gebruiker gedefinieerde instelling te maken.


Antwoord 8

U kunt het doel met de voorbewerkingssectie dupliceren, het hernoemen naar elke gewenste naam en vervolgens uw Preprocessor-macrowaarde wijzigen.

Other episodes