使用makefile进行Objective-C编译会产生意外错误?

时间:2017-06-26 17:11:49

标签: objective-c makefile gnustep

关注" Objective-C(第6版)中的编程显示了这个Hello World

#import <Foundation/Foundation.h>

int main(void)
{
    @autoreleasepool 
    {
        NSLog(@"Programming is fun!");
    }
    return 0;
}

当我尝试使用GNUStep makefile编译程序时

include $(GNUSTEP_MAKEFILES)/common.make

TOOL_NAME = Hello
Hello_OBJC_FILES = hello.m

include $(GNUSTEP_MAKEFILES)/tool.make

我收到错误,例如

hello.m: In function 'main':
hello.m:5:2: error: stray '@' in program
hello.m:5:3: error: 'autoreleasepool' undeclared (first use in this function)
hello.m:5:3: note: each undeclared identifier is reported only once for each function it appears in
hello.m:5:19: error: expected ';' before '{' token
hello.m:9:1: warning: control reaches end of non-void function [-Wreturn-type]
make[3]: *** [obj/Hello.obj/hello.m.o] Error 1
make[2]: *** [internal-tool-all_] Error 2
make[1]: *** [Hello.all.tool.variables] Error 2
make: *** [internal-all] Error 2

我做错了吗?我无法在程序中看到任何错误,我也不确定为什么makefile不起作用。

我应该添加我在Windows 10上运行

1 个答案:

答案 0 :(得分:2)

我在阅读此内容后发现了问题(http://gnustep.8.n7.nabble.com/getting-error-autoreleasepool-undeclared-first-use-in-this-function-td32251.html

原来使用NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // do your stuff [pool drain];

的语法糖
{{1}}

这个旧方法是GCC唯一支持的方法,你必须切换到clang才能使用Objective-C 2.0。