1

複数のターゲットを含むプロジェクトに取り組んでいます。ビルド設定にプリプロセッサ マクロがあります。

PRODUCT_NAME=\@\"$PRODUCT_NAME\"

AppName-Prefix.pch で $PRODUCT_NAME を次のように定義しました。

#define ACTIVE_PRODUCT PRODUCT_NAME

ACTIVE_PRODUCT が文字列と等しいかどうかを確認するにはどうすればよいですか?

私はこのようなことをしたいです例えば

if ACTIVE_PRODUCT == @"Product 1"
#define MY_VAR @"Test 1
#endif

if ACTIVE_PRODUCT == @"Product 2"
#define MY_VAR @"Test 2

したがって、$PRODUCT_NAME に応じてコードで MY_VAR を使用できます。

手伝ってください!よろしく、ビル。

4

2 に答える 2

1

それには以前の質問があると思いますが、答えはそれが不可能であると思われます ( comp.lang.c FAQを参照してください)。私がやろうとしているのは、できるだけ早くプリプロセッサを回避し、すべての処理を Objective-C に移行することです。したがって、変数の代わりに#defining、通常の Objective-C 変数を設定して、Objective-C で処理を続行できます。

static NSString *const ProductName = /* create string from PRODUCT_NAME */;

以降:

NSString *const MyVar = [ProductName isEqualToString:…] ? @"Foo" : @"Bar";

もちろん、これはMyVarplists のようなリソースではなく、ソース コードでのみ必要であることを前提としています。

于 2012-07-11T07:24:06.527 に答える
1

文字列を比較できないように見えるので、次のウォークアラウンドを使用しました。

各ターゲットで、PRODUCT1=\@\"$PRODUCT_NAME\" .... PRODUCT2=\@\"$PRODUCT_NAME\" などを定義しました。

次に、 app-name-prefix.pch で次のことを行いました。

#if defined (PRODUCT1)
#define MY_VAR @"Test 1"
....
#endif

#if defined (PRODUCT2)
#define MY_VAR @"Test 2"
...
#endif

これで私の場合の問題は解決しました。他の方法も歓迎されます。

于 2012-07-11T08:05:48.750 に答える