目录
1. makefile 出现的原因以及优势
linux 通过gcc编译器对文件进行编译连接,当一个大型的程序中间有多个文件参与时,需要同时编译多个文件,同时连接为一个可执行文件,由此执行相应的程序。
两个文件a.c与b.c
#include<stadio>
int main()
{
fun_c();
return 0
}
#include<stadio.h>
void fun_c()
{
printf(" Hello world ");
}
linux 编译:
gcc -o test a.c b.c
./test
// 或者
gcc -o a.o a.c
gcc -o b.o b.c
gcc -o test a.o b.o
上述是一个最简单的gcc编译程序,也给了我们启发,如果其中一个文件被修改了,那么为节约时间以及资源,只需要对修改的文件重新编译,在连接到“test”即可。但是如果编译文件非常多时,一个个文件编译显然不现实,而“makefile”很好的解决了这个问题。
2. makefile执行:
makefile格式:
目标:依赖1 依赖2
【Tab】 命令
而如何判断是否文件更新了:时间。如果“.c”文件晚于".o"则表示文件更新,如果更新则会执行“.o”的生成程序。
test: a.o b.o
gcc -o test a.o b.o
a.o: a.c
gcc -c -o a.o a.c
b.o: b.c
gcc -c -o b.o b.c
执行:
make
./test
如果修改文件较多情况:
如果有多个文件修改,按照前面的方法去添加依赖文件显然不现实。因此采用通配符来操作
%.o:表示所用的.o文件
%.c:表示所有的.c文件
$@:表示目标
$<:表示第1个依赖文件
$^:表示所有依赖文件
test: a.o b.o c.o
gcc -o test $^
%.o : %.c
gcc -c -o $@ $<
-
删除某一依赖文件:
// 删除某一依赖文件
clean:
rm a.o test
// 删除所有“.o”依赖文件
clean:
rm *.o test