只需触碰文件mod1.c
,make
就应该重新编译该源文件,生成其对应的目标文件 ,mod1.o
而不应重新编译mod2.c
,因为目标文件mod2.o
仍将完全保持最新状态(mod2.c
未触碰,但比 更旧mod2.o
,因此无需重新编译)。但我得到了以下行为:(
这不是个人创作,而是来自来源的书面示例[说明人们将见证如何知道未触碰并且不会重新编译它的make
文本])。make
mod2.c
Makefile
$ cat Makefile
SRC = mod1.c mod2.c main.c
OBJ = mod1.o mod2.o main.o
PROG = dbtest
$(PROG): $(OBJ)
gcc $(OBJ) -o $(PROG)
$(OBJ): $(SRC)
问题:
$ make
make: 'dbtest' is up to date.
$ touch mod1.c
$ make
cc -c -o mod1.o mod1.c
cc -c -o mod2.o mod2.c
cc -c -o main.o main.c
gcc mod1.o mod2.o main.o -o dbtest
文件内容
$ cat mod1.c
#include <stdio.h>
void foo() {
printf("Hello ");
}
$ cat mod2.c
#include <stdio.h>
void bar() {
printf(“World\n”);
}
$ cat main.c
#include <stdio.h>
void foo();
void bar();
int main (void) {
foo();
bar();
return 0;
}