2016-03-05 5 views
-2

Я попытался написать Makefile, но сделать скажи:Марка говорит использовать зЬй C99, даже если я использую его

$ make -f makefile 
cc -c -o source.o source.c 
source.c: In function ‘main’: 
source.c:5:5: error: ‘for’ loop initial declarations are only allowed in C99 mode 
    for(unsigned u = 0; u < 5; u++) 
    ^
source.c:5:5: note: use option -std=c99 or -std=gnu99 to compile your code 
make: *** [source.o] Errore 1 

source.c моя программа:

#include <stdio.h> 

int main(void) 
{ 
    for (unsigned u = 0; u < 5; u++) 
     printf("%u", u); 

    int *p; 

    if (p == NULL) 
     return -1; 

    return 0; 
} 

Makefile мой Makefile:

all: file 

file: source.o 
    gcc -std=c99 -g -Wall source.o -o file 

source.o: source.c 
    gcc -c -std=c99 -g -Wall source.c 

Почему это говорит м e использовать c99 (или gnu99), даже если я поместил этот аргумент в make-файл?

+3

Если посмотреть на выходе из 'make' команд, вы видите, что Безразлично» t на самом деле соответствует отображаемому «makefile». Вы уверены, что используете правильный 'makefile'? –

+0

Да, тот, который я опубликовал. – sbam

+0

@JoachimPileborg Я использовал 4 пробела вместо вкладки. – sbam

ответ

4

Aha. Кажется, я знаю, в чем твоя проблема.

Команды в файле Makefile должны иметь отступы с символами табуляции, а не пробелами. Возможно, вам придется настроить параметры текстового редактора, чтобы использовать здесь «реальные» вкладки.

(Использование пространства приведет к результатам вы описали, где правила читаются, но команды игнорируются.)

+1

. На самом деле это должно« ошибиться »с ошибкой (что-то о отсутствующие разделители или аналогичные). –

+0

Интересно ... почему делает команду выполнения 'cc -c -o source.o source.c', как показано в вопросе? Это своего рода дефолт? – lodo

+0

@ duskwuff Да, проблема в том, что, как я написал в комментариях к вопросу. – sbam

-2

Выходной сигнал make показывает, что режим C99 не использовался для компиляции источника. Пожалуйста, добавьте строку

CFLAGS=-std=c99 -g -Wall 

до назначения всех

+0

Это не отвечает на вопрос: на самом деле его make-файл не использует переменную 'CFLAGS', поэтому настройка бесполезна. – lodo

+0

Спасибо. Однако я нахожу ошибку: я сделал плохой отступ, 4 пробела вместо табуляции ... – sbam

+0

Его не делают, его компилятор, который использует эту переменную –

Смежные вопросы