我只是在学习make。我偶然发现了关于 make 的自动删除中间文件的问题。我想更好地预测 make 如何标记文件中间(即回答“会自动删除它吗?”),所以我编写了一个像这样的虚拟项目来演示我的问题:
你好.h
#ifndef HELLO_H
#define HELLO_H
void hello(const char *name);
#endif
你好ç
#include <stdio.h>
void hello(const char *name) {
printf("Hello %s\n", name);
}
主程序
#include "hello.h"
int main() {
hello("world");
return 0;
}
生成文件
all: main
./main
clean:
rm -f *.o *.a
rm -f main
hello.o:
gcc -c hello.c
libmyhello.a: hello.o
ar -crv $@ hello.o
main: libmyhello.a
gcc -L. -o $@ [email protected] -lmyhello
.PHONY: all clean
当我制作时main
,它需要libmyhello.a
。libmyhello.a
需要hello.o
. 如果我没理解错的话,hello.o
应该是一个中间文件。但在此过程中并未被删除make main
。
为什么?如何判断 make 是否会将文件视为中间文件并将其删除?