2013-11-12 3 views
0

Для моего назначения мы должны скомпилировать cpp2html.c для создания cpp2html.o. Мы должны сделать то же самое с lex.yy.c. lex.yy.c создается командой flex cppscanner.l. Наконец, мы должны связать файлы .o вместе для создания исполняемой программы cpp2html. Мой make-файл должен использовать gcc вместо g ++, который я считаю Я делаю правильно. Я попытался запустить этот конкретный make-файл для этой программы в течение нескольких часов, так как один для части g ++ работал нормально. Когда я отправляю этот make-файл, мне говорят, что «ваш make-файл слишком много работает, когда только cpp2html.c был изменен». Я попытался просмотреть эту ошибку и смог найти кого-то, у кого была ошибка в части g ++; Я пробовал адаптировать его, но это не сработало. Я попытался изменить формат файла makefile, я попытался изменить коды, но я просто не знаю, что я делаю неправильно.Makefile делает «слишком много работы»

Как я могу изменить свой make-файл, чтобы сделать то, что ему нужно, не делая это «слишком много работы»?

My makefile выглядит следующим образом.

cpp2html: cpp2html.o lex.yy.o 
    gcc -g -DDEBUG cpp2html.o lex.yy.o 
    mv a.out cpp2html 
cpp2html.o: cpp2html.c 
    gcc -g -DDEBUG -c cpp2html.c 
    flex cppscanner.l 
lex.yy.o: lex.yy.c 
    gcc -g -c lex.yy.c 

EDIT:

cpp2html: cpp2html.o lex.yy.o 
    gcc -g cpp2html.o lex.yy.o 
    gcc -g -DDEBUG cpp2html.o lex.yy.o -o cpp2html 
cpp2html.o: cpp2html.c 
    gcc -g -c cpp2html.c 
lex.yy.c: cppscanner.l 
    flex cppscanner.l 
lex.yy.o: lex.yy.c 
    gcc -g -c lex.yy.c 
+3

вместо 'mv' вы можете использовать' -o' вариант 'gcc'. Используйте '-o cpp2html'. Также поместите команду 'flex' в отдельную цель. –

+0

shiplu, я заменил всю строку «mv a.out cpp2html» на «-o cpp2html», и теперь он говорит, что мой makefile даже не строит cpp2html. Что вы подразумеваете под словом flex в отдельной цели? – JC2112

+1

Удалите всю строку 'mv' и используйте эту команду' gcc -g -DDEBUG cpp2html.o lex.yy.o -o cpp2html'. Для 'flex' создать отдельную цель. 'lex.yy.c: cppscanner.1' с командой' flex cppscanner.l'. –

ответ

0

Этот Makefile должен решить эту проблему,

cpp2html: cpp2html.o lex.yy.o 
    gcc -g -DDEBUG cpp2html.o lex.yy.o -o cpp2html 

cpp2html.o: cpp2html.c 
    gcc -g -DDEBUG -c cpp2html.c 

lex.yy.o: lex.yy.c 
    gcc -g -c lex.yy.c 

lex.yy.c: cppscanner.l 
    flex cppscanner.l -o lex.yy.c 
+0

Я пробовал это, ввел его точно так же, как вы его написали, и я получаю «ERROR: конец файла в строке» «make: **** [lex.yy.c] Ошибка 1» Кроме того, в нем говорится, что make-файл не работает 't build' cpp2html 'при вызове. Предполагается, что у lex.yy.c есть пустая строка? Я попытаюсь запустить его без этой пустой строки сразу после двоеточия, но я не уверен, что все. – JC2112

+0

Мне удалось заставить его работать, вставив cppscanner.l для начальной строки после двоеточия, другой с командой flex cppscanner.l, а другой - с линией -o. – JC2112

+0

@JoJoBya извините, я спешил, поэтому сделал некоторую ошибку. Я только что обновил make-файл. Это должно сделать это. –

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