web-dev-qa-db-ja.com

Xcodeでプリプロセッサシンボルを定義する方法

Xcodeプロジェクトでプロパティを設定して、条件付きコンパイル用のシンボルを設定することは可能ですか?

私の目的は、インポート/インクルードを使用せずに、すべてのファイルで使用できるシンボルを作成し、いくつかのプロジェクトで共通クラスのセットが特別な動作を行えるようにすることです。次のように、ただし独自のシンボルを使用します。

#if TARGET_IPHONE_SIMULATOR
    ...
#endif
95
Steph Thirion

[ターゲット]または[プロジェクト]設定に移動し、左下にある歯車アイコンをクリックして、[ユーザー定義の設定を追加]を選択します。新しい設定名はGCC_PREPROCESSOR_DEFINITIONS、および右側のフィールドに定義を入力できます。

Stephのコメントによると、完全な構文は次のとおりです。

constant_1=VALUE constant_2=VALUE

しないことに注意してください 必要 値を与えるのではなく、シンボルを#defineしたいだけなら '='(#ifdefステートメント)

113
Ben Gottlieb

ユーザー定義の設定を作成する必要はありません。組み込みの設定「プリプロセッサマクロ」は正常に機能します。 代替テキストhttp://idisk.mac.com/cdespinosa/Public/Picture%204.png

同じプレフィックスファイルを使用する複数のターゲットまたはプロジェクトがある場合は、代わりにプリコンパイル済みヘッダーで使用されないプリプロセッサーマクロを使用してください。そうすると、マクロ定義の違いが不要なプリコンパイル済みヘッダーのセットをトリガーしません。

86
cdespinosa

補足として、この手法を使用してターゲットの文字列を定義している場合、これを定義して使用する必要があります。

Build Settings-> Preprocessor Macrosで、yesバックスラッシュは定義で重要です:

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

そしてソースコードで:

objectManager.client.baseURL = APPURL_NSString;
41
Stickley

*_Prefix.pchファイルを使用して、プロジェクト全体のマクロを宣言できます。そのファイルは通常あなたの中にありますその他のソースグループ。

5
chunkyguy

「GCC 4.2 Preprocessing」の下にあります(または単に検索ボックスに「prepro」と入力します)...

...しかし、私の人生のために私はそれを動作させることはできません。

標準のデバッグ構成とリリース構成があり、デバッグ構成でDEBUG = 1を定義したい。しかし、値として追加した後:

(設定ウィンドウで)>プリプロセッサマクロ:DEBUG = 1

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

...決して印刷/呼び出されません。私を夢中にさせている...

3
hEADcRASH

Kevin Laityのコメント(cdespinosaの回答を参照)に応答して、ビルド設定に表示されないGCC Preprocessingセクションについて、Active SDKを(Base SDK)と表示し、このセクションを表示します。これを行うには、[プロジェクト]> [アクティブターゲットの設定]> [XXX(Base SDK)]を選択します。 XCode(Base SDK)の異なるバージョンでは、(Project SettingまたはProject Default)のように異なる場合があります。

このセクションが表示されたら、ユーザー定義の設定を作成するのではなく、定義をプロセッサマクロに追加できます。

1
Mark24x7

Xcode 9.4.1およびC++プロジェクトの場合。 const char*プリプロセッサマクロをDebugReleaseビルドの両方に追加しています。

  1. プロジェクトを選択してください

    select project

  2. ビルド設定を選択

    select build settings

  3. プリプロセッサマクロ」を検索

    search1search2

  4. インタラクティブリストを開く

    open interactive list

  5. マクロを追加し、引用をエスケープすることを忘れないでください

    add path

  6. ソースコードで共通として使用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

前処理セクションを持つターゲットを複製し、名前を任意の名前に変更してから、プリプロセッサマクロ値を変更できます。

0
kslcam