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 常见问题解答)。我试图做的是尽快避免预处理器,将所有处理转移到Objective-C。#defining因此,您可以设置一个常规的 Objective-C 变量并在 Objective-C 中继续处理,而不是您的变量:

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

然后:

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

当然,这假设您只需要MyVar源代码,而不需要 plist 等资源。

于 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 回答