1

我正在尝试使用编译器选项 c99 或 gnu99 编译 GNUstep 程序,但它没有被识别......这是我的 makefile:

include $(GNUSTEP_MAKEFILES)/common.make

TOOL_NAME = triangular
triangular_C_FLAGS = -std=gnu99
triangular_HEADERS =
triangular_OBJC_FILES = main.m
triangular_RESOURCE_FILES =

include $(GNUSTEP_MAKEFILES)/tool.make

谁能指出我正确的方向或让我知道我做错了什么?

这是make的输出:

This is gnustep-make 2.6.0. Type 'make print-gnustep-make-help' for help.
Making all for tool triangular...
 Compiling file main.m ...
main.m: In function 'main':
main.m:18:3: error: 'for' loop initial declarations are only allowed in C99 mode

main.m:18:3: note: use option -std=c99 or -std=gnu99 to compile your code
make[3]: *** [obj/triangular.obj/main.m.o] Error 1
make[2]: *** [internal-tool-all_] Error 2
make[1]: *** [triangular.all.tool.variables] Error 2
make: *** [internal-all] Error 2
4

5 回答 5

3

ADDITIONAL_FLAGS += -std=gnu99 为我工作(灵感来自https://github.com/maddox/regexkit/blob/master/GNUstep/GNUmakefile

于 2011-12-16T02:01:53.680 回答
0

另一个长镜头:

export triangular_C_FLAGS = -std=gnu99

(这些 makefile 似乎是递归的。)如果这不起作用,您将不得不找到试图构建的规则main.o

于 2011-06-30T18:46:25.750 回答
0

我在我的项目中遇到了类似的问题,使用@eriktous 建议的 OBJCFLAGS 变量对我有用。所以,在你的项目中,试试这个:

include $(GNUSTEP_MAKEFILES)/common.make

TOOL_NAME = triangular
triangular_OBJCFLAGS = -std=c99
triangular_HEADERS =
triangular_OBJC_FILES = main.m
triangular_RESOURCE_FILES =

include $(GNUSTEP_MAKEFILES)/tool.make
于 2012-07-16T11:01:42.873 回答
0

我对 GNUstep 一无所知,但文档似乎表明您应该使用triangular_CFLAGS(C 和 FLAGS 之间没有下划线)。

此外,我对ObjC的了解更少,但我想知道您是否不应该使用它triangular_OBJCFLAGS

于 2011-06-30T12:37:41.720 回答
0

乍一看,不知道包含的 makefile 的内容,这看起来像输入 for automake,它将变量转换为适当的规则。你是如何运行你的makefile的?你只是跑步make还是automake makefile.am其他?

要尝试的一件事是只添加该行

CFLAGS+=-std=gnu99

到你的makefile。

于 2011-06-30T05:22:44.540 回答