学习参考文章:
http://my.oschina.net/leejan97/blog/354904
http://my.oschina.net/leejan97/blog/224011
http://my.oschina.net/leejan97/blog/227303
1.遇到问题
项目中引用静态库项目,在项目的pch文件中定义宏TestBusDefine,希望静态库项目通过#ifdef TestBusDefine来判断是否是当前的外围项目。
在.pch文件中
#define TestBusDefine @"TestBusDefine first define"
在Test.m文件中
#import "Test.h"
#define TestDefine @"TestDefine first define"
#ifdef TestBusDefine
#define TestDefine @"TestDefine second define"
#endif
@implementation Test
- (void)doTest
{
NSLog(@"Test-doTest:TestBusDefine:%@",TestBusDefine);
NSLog(@"Test-doTest:TestDefine:%@",TestDefine);
}
@end
在Test1.m中
#import "Test1.h"
#define Test1Define @"Test1Define first define"
#ifdef TestBusDefine
#define Test1Define @"Test1Define second define"
#endif
@implementation Test1
- (void)doTest1
{
// NSLog(@"Test1-doTest1:TestBusDefine:%@",TestBusDefine);
NSLog(@"Test1-doTest1:Test1Define:%@",Test1Define);
}
@end
项目目录
输出结果
2015-07-28 15:20:40.530 TestBus[3739:87442] Test-doTest:TestBusDefine:TestBusDefine first define
2015-07-28 15:20:40.531 TestBus[3739:87442] Test-doTest:TestDefine:TestDefine second define
2015-07-28 15:20:40.531 TestBus[3739:87442] Test1-doTest1:Test1Define:Test1Define first define
结论:
在pch预定义的宏,作用范围只限本项目。
在pch中预定义的宏,对项目中包含的静态库是不可见的。