4

コマンドラインで xcodebuild によってプロジェクトをビルドします。xCode にはありません。コードに影響を与えることができるように、プロジェクトにマークを渡したいと思います。以下のコードなど:

#if (API_TYPE == 1)
  #define URL_API @"https://dapi.xxx.com/1.1/"
#elif (API_TYPE == 2)
  #define URL_API @"https://tapi.xxx.com/1.1/"
#elif (API_TYPE == 3)
  #define URL_API @"https://api.xxx.com/1.1/"
#else
  #error "API_TYPE value error! should be only value 1,2,3 !"
#endif 

API_TYPE の定義をコード ファイルの外に渡したい。xcodebuild コマンドなどを使用します。しかし、次のようには機能しません。

xcodebuild -sdk xxx -target xxx SYMROOT=${XCSYMROOT} API_TYPE=${APITYPE}

API_TYPE の値は変更されていません。しかし、SYMROOT の値が変更されました。では、外部の API_TYPE に値を渡すことをどのように実装できますか?

4

2 に答える 2

4

これが古い投稿であることは知っていますが、使用しないのはなぜですか:

xcodebuild GCC_PREPROCESSOR_DEFINITIONS='$GCC_PREPROCESSOR_DEFINITIONS API_TYPE=1'

アプリ内の既存の定義をオプションでオーバーライドできるようにしたい場合は、次のようにコーディングします。

#define DEFAULT_API_TYPE 1

#ifdef API_TYPE
  #define REAL_API_TYPE API_TYPE
#else
  #define REAL_API_TYPE DEFAULT_API_TYPE
#endif
于 2014-11-28T08:37:53.480 に答える
2

使用したコマンドライン設定は、少なくともXcodeのビルド環境内で環境変数を効果的に設定します。ただし、シェル環境変数を設定してもその環境変数がプリプロセッサに表示されないのと同様に、そのビルド環境はコンパイラのプリプロセッサに渡されません。

プリプロセッサで表示するには、プロジェクトまたは必要な特定のターゲットのプリプロセッサマクロビルド設定にエントリを追加します。エントリの形式は「FOO=$(FOO)」である必要があります。Xcodeはこれを「-DFOO=環境からのFOOの値」としてコンパイラに渡します。

プリプロセッサマクロの設定を編集するときは、すべての構成(または、すべてに設定したくない場合は、設定したい構成)に対して編集していることを確認してください。

于 2012-08-13T03:38:42.463 に答える