我正在开发一个有多个目标的项目, 我在构建设置中有一个预处理器宏:
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
请协助! 问候, 比尔。
答案 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
这解决了我的问题。 任何其他方式也将受到赞赏。