我正在寻找一种在没有标题或符号的情况下优雅降级的方法。考虑我的安全文件:
#import "FooHeader.h"
// override some method that needs a symbol from FooHeader
-(id)myImplementation:(FooSymbol)aSymbol
{
...
}
我想要做的是在尝试导入FooHeader.h之前检查它是否存在。接下来,如果标头不存在,那么符号FooSymbol也不可用,所以我也不想尝试编译该方法。像这样:
#if HEADER_EXISTS(FooHeader)
#import "FooHeader.h"
#endif
// override some method that needs a symbol from FooHeader
#if SYMBOL_EXISTS(FooSymbol)
-(id)myImplementation:(FooSymbol)aSymbol
{
...
}
#endif
有人知道这种机制是否可行?理想情况下,这适用于C / C ++ / Objective-C环境。
由于
答案 0 :(得分:5)
这通常使用autoconf完成。您创建一个名为configure.ac的文件。在configure.ac中,添加AC_CHECK_HEADER([FooHeader.h],....
当您在项目上运行./configure时,Makefile CFLAGS将获得-DHAVE_FooHeader定义。在C文件中使用#ifdef HAVE_FooHeader。
我没有方便的示例,但建议检查autoconfig上的信息页面或在线查看autotools教程。