it-swarm.com.de

So definieren Sie ein Präprozessorsymbol in Xcode

Ist es möglich, ein Symbol für die bedingte Kompilierung festzulegen, indem Eigenschaften in einem Xcode-Projekt eingerichtet werden?

Mein Ziel ist es, ein Symbol zu erstellen, das für alle Dateien verfügbar ist, ohne dass import/include verwendet werden muss, damit eine Reihe gemeinsamer Klassen in einigen Projekten ein spezielles Verhalten aufweisen kann. Wie das folgende, aber mit meinen eigenen Symbolen.

#if TARGET_IPHONE_SIMULATOR
    ...
#endif
95
Steph Thirion

Gehen Sie zu Ihren Ziel- oder Projekteinstellungen, klicken Sie auf das Zahnradsymbol unten links und wählen Sie "Benutzerdefinierte Einstellung hinzufügen". Der neue Einstellungsname sollte GCC_PREPROCESSOR_DEFINITIONS Sein, und Sie können Ihre Definitionen in das rechte Feld eingeben.

Per Stephs Kommentar lautet die vollständige Syntax:

constant_1=VALUE constant_2=VALUE

Beachten Sie, dass Sie dies nicht tun brauchen Das '=' ist, wenn Sie nur ein Symbol definieren möchten, anstatt ihm einen Wert zu geben (für #ifdef - Anweisungen).

113
Ben Gottlieb

Sie müssen keine benutzerdefinierte Einstellung erstellen. Die eingebaute Einstellung "Preprocessor Macros" funktioniert einwandfrei. Alternativtext http://idisk.mac.com/cdespinosa/Public/Picture%204.png

Wenn Sie mehrere Ziele oder Projekte haben, die dieselbe Präfixdatei verwenden, verwenden Sie stattdessen Präprozessormakros, die in vorkompilierten Headern nicht verwendet werden, damit Unterschiede in Ihrer Makrodefinition keine unnötigen zusätzlichen vorkompilierten Header auslösen.

86
cdespinosa

Wenn Sie diese Technik verwenden, um Zeichenfolgen in Ihrem Ziel zu definieren, musste ich sie wie folgt definieren und verwenden:

In Build-Einstellungen -> Präprozessor-Makros und Ja-Schrägstriche sind in der Definition von entscheidender Bedeutung:

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

Und im Quellcode:

objectManager.client.baseURL = APPURL_NSString;
41
Stickley

Du kannst den ... benutzen *_Prefix.pch Datei, um projektweite Makros zu deklarieren. Diese Datei befindet sich normalerweise in Ihrer Other Sources Gruppe.

5
chunkyguy

Es ist unter "GCC 4.2 Preprocessing" (oder setzen Sie einfach "prepro" in das Suchfeld) ...

... aber für mein Leben kann ich es nicht zum Laufen bringen.

Ich habe meine Standard-Debug- und Release-Konfigurationen und möchte DEBUG = 1 in der Debug-Konfiguration definieren. Aber nach dem Hinzufügen als Wert:

(im Einstellungsfenster)> Präprozessor-Makros: DEBUG = 1

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

... wird nie gedruckt/aufgerufen. Es macht mich verrückt...

3
hEADcRASH

Als Antwort auf den Kommentar von Kevin Laity (siehe die Antwort von cdespinosa) zum Abschnitt "GCC Preprocessing", der in Ihren Build-Einstellungen nicht angezeigt wird, stellen Sie das Active SDK auf den Wert "Base SDK" und dieser Abschnitt wird angezeigt. Wählen Sie dazu das Menü Projekt> Aktives Ziel festlegen> XXX (Basis-SDK). In verschiedenen Versionen von XCode (Base SDK) kann dies unterschiedlich sein (Projekteinstellung oder Projektstandard).

Nachdem dieser Abschnitt angezeigt wurde, können Sie Ihre Definitionen zu Prozessormakros hinzufügen, anstatt eine benutzerdefinierte Einstellung zu erstellen.

1
Mark24x7

Für Xcode 9.4.1 und C++ Projekt. Hinzufügen von const char* - Präprozessor-Makros zu den beiden Builds Debug und Release.

  1. Wählen Sie Ihr Projekt aus

    select project

  2. Wählen Sie Build Settings

    select build settings

  3. Suche " Präprozessor-Makros"

    search1search2

  4. Interaktive Liste öffnen

    open interactive list

  5. Fügen Sie Ihre Makros hinzu und vergessen Sie nicht, das Anführungszeichen zu umgehen

    add path

  6. Verwendung im Quellcode wie gewohnt 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");
    ...
    
1
Petr Javorik

Sie können das Ziel mit dem Vorverarbeitungsabschnitt duplizieren, es in einen beliebigen Namen umbenennen und dann Ihren Präprozessor-Makrowert ändern.

0
kslcam