如何比较前缀标题中的$ PRODUCT_NAME?

时间:2012-07-11 07:16:37

标签: ios c-preprocessor

我正在开发一个有多个目标的项目, 我在构建设置中有一个预处理器宏:

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

因此我可以在代码中使用MY_VAR,具体取决于$ PRODUCT_NAME

请协助! 问候, 比尔。

2 个答案:

答案 0 :(得分:1)

我认为有一个previous question for that,答案似乎是不可能的(参见comp.lang.c FAQ)。我尝试做的是尽快避免预处理器,将所有处理转移到Objective-C。因此,您可以设置常规的Objective-C变量并继续在Objective-C中进行处理,而不是#defining您的变量:

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

后来:

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

当然,这假设您在源代码中只需要MyVar,而不是像plists这样的资源。

答案 1 :(得分: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

这解决了我的问题。 任何其他方式也将受到赞赏。