Как получить GNUmakefile для распознавания опции CFLAGS для -std = c99 или -std = gnu99? - PullRequest
1 голос
/ 30 июня 2011

Я пытаюсь скомпилировать программу GNUstep с опцией компилятора c99 или gnu99, но она не распознается ... вот мой make-файл:

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

Ответы [ 5 ]

3 голосов
/ 16 декабря 2011

ADDITIONAL_FLAGS += -std=gnu99 работал на меня (вдохновлено https://github.com/maddox/regexkit/blob/master/GNUstep/GNUmakefile

0 голосов
/ 16 июля 2012

Я столкнулся с подобной проблемой в своем проекте, и использование переменной OBJCFLAGS, предложенной @eriktous, сработало для меня. Итак, в вашем проекте попробуйте это:

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
0 голосов
/ 30 июня 2011

Я ничего не знаю о GNUstep, но документация , кажется, указывает, что вы должны использовать triangular_CFLAGS (без подчеркивания между C и FLAGS).

Кроме того, я знаю еще меньше об ObjC, но мне интересно, не стоит ли вместо этого использовать triangular_OBJCFLAGS?

0 голосов
/ 30 июня 2011

Еще один длинный выстрел:

export triangular_C_FLAGS = -std=gnu99

(Эти make-файлы кажутся рекурсивными.) Если это не сработает, вам нужно найти правило, которое пытается построить main.o.

0 голосов
/ 30 июня 2011

На первый взгляд и без знания содержимого включенных make-файлов это выглядит как ввод для automake, который преобразует переменные в надлежащие правила.Как у вас работает ваш make-файл?Вы просто запускаете make или automake makefile.am или что-то еще?

Одна вещь, которую нужно попробовать, это просто добавить строку

CFLAGS+=-std=gnu99

в ваш make-файл.

...