makefile和make
前言
在写项目时,避免每次都输入gcc/g++,我们可以实现自动化编译来提高软件开发效率。
make 是一条命令,makefile是一个文件。
1. makefile文件举例
创建文件:
touch test.c
touch makefile
makefile文件内容:
分号行为依赖关系,test文件依赖test.o ,test.o依赖test.s,test.s依赖test.i,test.i依赖test.c。
依赖行为是依赖关系的下一行:以tab开头,然后是输入如何实现依赖关系
test:test.o
gcc -o test test.o
test.o:test.s
gcc -o test.o -c test.s
test.s:test.i
gcc -o test.s -S test.i
test.i:test.c
gcc -o test.i -E test.c
.PHONY:
clean:
rm -f test.o test.i test.s test.o
test.c 内容:
#include <stdio.h>
int main()
{
printf("hello Makefile!\n");
return 0;
}
2. 讲解
如果直接在命令行里面输入make,makefile就会一层一层的找文件的依赖关系,直到实现第一个目标文件。
在依赖命令行中,可以用$@ 和$^分别代替依赖文件和被依赖文件。
.PHONY:修饰伪目标,让其总是被执行。
不在第一个目标则通过make + 命令名实现。
当make实现之后,如果没有清理文件,则不允许再次执行make。
服务器判断的依据是依赖关系中的两个文件的时间戳,如果依赖文件的内容修改时间戳大于被依赖文件的时间戳,则不会再次实现make.
2.1 stat命令
显示文件的状态
access:文件最近访问时间,在文件被多次访问后改变(减少因访问次数过多,改变次数过多浪费资源)
modify:文件内容修改时间,在文件内容被修改后改变
change:文件属性被改变后改变
通常modify改变后change也会改变,因为修改内容后会改变文件大小,而大小是属于文件属性。