Я пытаюсь создать make-файл, для маленькой оболочки пишу.
Файлы:
myShell.c
myShellFunc.c
parser.y
shel.l
Makefile:
CC = gcc
CFLAGS= -g -Wall
myshell: myShell.o myShellFunc.o parser.tab.o lex.yy.o
$(CC) $(CFLAGS) myShell.o myShellFunc.o parser.tab.o lex.yy.o -lfl -o myshell
myShell.o: myShell.c myShell.h parser.tab.h
myShellFunc.o: myShellFunc.c myShell.h
parser.tab.c: bisonfiles
parser.tab.h: bisonfiles
lex.yy.c: shell.l
flex shell.l
.PHONY: bisonfiles
bisonfiles: parser.y
bison -d parser.y
Проблема в том, что даже если в файлах нет изменений, он все равно их компилирует.
Когда я запускаю make
в первый раз, я получаю это:
bison -d parser.y
gcc -g -Wall -c -o myShell.o myShell.c
gcc -g -Wall -c -o parser.tab.o parser.tab.c
flex shell.l
gcc -g -Wall -c -o lex.yy.o lex.yy.c
gcc -g -Wall myShell.o myShellFunc.o parser.tab.o lex.yy.o -lfl -o myshell
Второй раз, когда я запускаю его, ничего не меняя:
bison -d parser.y
gcc -g -Wall -c -o parser.tab.o parser.tab.c
gcc -g -Wall myShell.o myShellFunc.o parser.tab.o lex.yy.o -lfl -o myshell
В третий раз я запускаю его, ничего не меняя:
bison -d parser.y
gcc -g -Wall -c -o myShell.o myShell.c
gcc -g -Wall -c -o parser.tab.o parser.tab.c
gcc -g -Wall myShell.o myShellFunc.o parser.tab.o lex.yy.o -lfl -o myshell
Почему это происходит, когда я не внес никаких изменений?
Как правильно написать make-файл?