【问题标题】:How to compare $PRODUCT_NAME in a prefix header?如何比较前缀标头中的 $PRODUCT_NAME?
【发布时间】:2012-07-11 07:16:37
【问题描述】:

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

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

请帮忙! 问候, 比尔。

【问题讨论】:

    标签: ios c-preprocessor


    【解决方案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,而不需要 plist 之类的资源。

    【讨论】:

    • 谢谢,是的,似乎不可能。谢谢! :D
    【解决方案2】:

    好的,因为似乎无法比较字符串,所以我使用了以下解决方法:

    在每个目标中我定义了 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
    

    这解决了我的问题。 任何其他方式也将不胜感激。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 2021-05-18
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      相关资源
      最近更新 更多