在消费者项目中找不到库预处理器宏

时间:2017-04-27 10:52:51

标签: ios objective-c macros c-preprocessor

我有一个名为.a的旧BULib库,其中在库目标的NEW_API中定义了一个宏GCC_PREPROCESSOR_DEFINITIONS。在lib中使用此宏来公开头文件中的某些方法,或者不使用条件编译。例如:

#ifdef NEW_API
+ (nullable NSString *)user;
#endif

在项目中使用此库时出现问题。当我想使用

[BULib user];

我收到编译时错误

  

没有已知的选择器类方法' getUser'

如果我在项目的NEW_API中添加GCC_PREPROCESSOR_DEFINITIONS,那么问题就解决了,然后我可以使用该符号并按预期工作。

也许我误解了图书馆与消费者项目之间宏的使用,但我不想要这种行为。

如果使用宏集正确编译了lib,为什么我必须在使用者项目中设置宏?如果这不是实现这一目标的方式,那又是什么呢?

非常感谢你。

1 个答案:

答案 0 :(得分:0)

有几种可能的解决方案:

  1. NEW_API中添加GCC_PREPROCESSOR_DEFINITIONS
  2. 删除#ifdef NEW_API#end
  3. 在导入libs标题
  4. 之前使用#define NEW_API
  5. + (nullable NSString *)user;类别
  6. 中添加BULib和其他缺失的方法

    我个人更喜欢第三种选择。 它会是这样的:

    #define NEW_API
    #import <bulib.h>