【问题标题】:How to get a GNUmakefile to recognize CFLAGS option for -std=c99 or -std=gnu99?如何让 GNUmakefile 识别 -std=c99 或 -std=gnu99 的 CFLAGS 选项?
【发布时间】:2011-06-30 03:42:58
【问题描述】:

我正在尝试使用编译器选项 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

【问题讨论】:

  • 你没有给我们足够的信息来继续。当你尝试运行它时会发生什么? tool.makecommon.make 长什么样子?
  • 我添加了 make 的输出。 tool.make 和 common.make 是 GNUstep 环境中包含的大型 makefile。
  • 这表示main.m 第 18 行存在问题。如果错误不明显,请尝试在 helloWorld 中隔离该代码片段并手动编译,无需 Make。跨度>
  • @beta - main.m 的第 18 行将有类似 for (int i=0; i<10; ++i){ 的内容,虽然在 c89 中是非法的,但在 c99 中是有效的。问题似乎是将-std=gnu99 标志传递给编译器。

标签: objective-c makefile gnustep


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    要尝试的一件事是添加行

    CFLAGS+=-std=gnu99
    

    到你的makefile。

    【讨论】:

    • 感谢您的回答。我只是在运行make。我尝试了上述方法,但不幸的是仍然出现错误。
    【解决方案3】:

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

    此外,我对 ObjC 的了解甚至更少,但我想知道您是否不应该使用 triangular_OBJCFLAGS 来代替?

    【讨论】:

      【解决方案4】:

      另一个远射:

      export triangular_C_FLAGS = -std=gnu99
      

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

      【讨论】:

        【解决方案5】:

        我在我的项目中遇到了类似的问题,使用 @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
        

        【讨论】:

        • 您能再解释一下吗?也许添加参考?
        • 我试图通过应用@eriktous 在之前对该问题的回复中给出的提示来解决类似的问题。该海报引用了 GNUstep documentation,其中提到了 OBJCFLAGS 变量。我已经编辑了我的原始帖子以显示完整的 makefile。
        猜你喜欢
        • 1970-01-01
        • 2014-07-06
        • 1970-01-01
        • 2011-07-15
        • 1970-01-01
        • 2016-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多