我刚刚开始查看make文件,但不确定make文件的默认行为(运行命令make with without parameters)是什么时候1之后的目标不是第1个的依赖。
myprogram: main.o foo.o
gcc -o myprogram main.o foo.o
main.o: main.c foo.h
gcc -c main.c
foo.o: foo.c foo.h
gcc -c foo.c
main2.o: main2.c foo2.h
gcc -c main2.c
foo2.o: foo2.c foo2.h
gcc -c foo2.c
从上面开始,如果我要运行make
并更新文件main2.c
和foo2.c
,那么命令gcc -c main2.c
和gcc -c foo2.c
都会运行吗?
答案 0 :(得分:3)
在您的示例中,main2.o
和foo2.o
不会更新。这是因为它们不需要myprogram
default target,因为它是文件中的第一个目标,并且没有使用.DEFAULT
指定默认目标。
make
会使特定目标.DEFAULT
定义目标,如果未指定目标,则会使指定的first target或默认目标{{3} }}
答案 1 :(得分:0)
伪目标是一个实际上不是文件名的目标;相反,它只是在您发出明确请求时要执行的配方的名称。使用虚假目标有两个原因:避免与同名文件冲突,并提高性能。
.PHONY=all
//line below might not be necessary to your program but here are some flags
OPTS=-g -std=gnu99 -pedantic -Wall -Werror
all: $(OBJS)
myprogram: main.o foo.o
gcc -o myprogram $(OPTS) main.o foo.o
main.o: main.c foo.h
gcc -c $(OPTS) main.c
foo.o: foo.c foo.h
gcc -c $(OPTS) foo.c
main2.o: main2.c foo2.h
gcc -c $(OPTS) main2.c
foo2.o: foo2.c foo2.h
gcc -c $(OPTS) foo2.c
clean:
rm -f *.o $(OBJS)