0

私は2つのターゲットを持つiOSプロジェクトを持っています。1つはフルバージョンであり、もう1つはライトバージョンです。機能を表示/非表示にするために、次のコードを使用しています。

#ifdef FULL_VERSION
  NSLog(@"Full version");
#endif 

これは、プロジェクトレベルでプリプロセッサマクロを定義する場合はうまく機能しますが、ターゲットレベルで設定すると、機能しません。ちなみに私はそれらをこのように設定しています:

Apple LLVM compiler 3.0 - Preprocessing
  Preprocessor Macros    FULL_VERSION

どのバージョンが実行されているかを知るために、ターゲットレベルでそれらを定義する必要があります。

プロジェクトレベルでのみ機能する理由はありますか?

4

3 に答える 3

1

私の問題は、スキームが正しいターゲットを指していなかったことです。スキームを編集すると、問題が解決しました。

于 2012-08-20T20:36:17.313 に答える
0

プリプロセッサ定義は、プロジェクト設定をオーバーライドまたは継承して、期待どおりにターゲットで機能します。

よくある間違いの 1 つは、ビルド設定を 1 つの (未使用の) 構成だけに設定することです。すべての構成でプリプロセッサ定義を設定したかどうかを確認します。

ビルド ログ (Command-7) をチェックして、正しいオプションがコンパイラに渡されているかどうかを確認できます-DFULL_VERSION

于 2012-08-09T16:41:42.680 に答える
0

ターゲットでは、すべての「PreProcessor Macros」に対して、コードで使用したものとまったく同じ定義があり、「FULL_VERSION」(引用符を除く)になっていることを確認してください。ボックスを展開して、すべての構成にも定義があることを確認します。

左ペインで右のアイコンを選択し、一番上の「ビルド」を選択すると、コンパイラが何をしているかを実際に確認できます。コンパイル中のファイルを見つけ、その行を選択し、その行の右端のアイコンをクリックして、実際のコンパイル コマンドを表示します。以下に示すように、2 つのプリプロセッサを定義しています。また、その巨大なコンパイル行を選択し、空の TextEdit ウィンドウに貼り付けてから、「-D」を検索します。そこに -DFULL_VERSION が表示されるはずです。表示されない場合は、ビルド コマンドに正しく入力されていません。ターゲットが間違っている、構成が間違っているなどです。Xcode を 8 年間使用して、この機能が失敗するのを見たことはありません。

私のコンパイル行の1つ:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c -arch i386 -fmessage-length=0 -std=c99 -fobjc-arc … -DUNIVERSAL -DDEBUG=1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk -fexceptions … LTSharing.m -o ...LTSharing.o 
于 2012-08-08T21:35:38.760 に答える