文章目录
- make/Makefile
- make
- Makefile
- 时间
make/Makefile
Linux项目自动化构建工具。
- makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能。
- makefile带来的好处就是:自动化编译,一旦写好,只需要执行make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
- make是一个命令工具,是一个解释makefile中指令的命令工具。
- make是一条命令,makefile是一个文件。
make
系统中提供的一个命令
which make
Makefile
当前目录下创建的一个文件,这个文件保存的是对应的依赖关系和依赖方法
- 文件名:
makefile / Makefile
构建项目
mybin:mytest.c //表明依赖关系
gcc -o mybin mytest.c //依赖方法
- 输入make执行构建项目
依赖关系
我为什么要帮你?
- ”爸,我是你儿子!“
依赖方法
具体如何去帮你。
- ”爸,我是你儿子,我没钱了!“;
目标文件 : 依赖文件列表(源文件)
[table] 依赖方法
清理项目
clean: //
rm -f mybin //
-
输入
make clean
执行清理项目 -
make和makefile在形成目标文件的时候,默认是从上到下扫描makefile文件的,默认形成/执行第一个目标文件。
-
默认只形成一个。
-
在不修改依赖文件的时候,连续多次make,只构建一次项目。
-
make和makefile怎么知道可执行程序是最新的呢?
- 这个是通过对比时间比出来的,只要可执行程序的最近的修改时间比所有源文件的最近修改时间都要新。就说明这个可执行程序是最新的。
- 源文件和可执行程序的最近修改时间基本上是不可能相同的。
-
如果同时存在多个源文件,通过链接之后生成了一个可执行文件,然后出现了问题或者需要修改这多个源文件中的一两个,源文件没有全部修改,此时再进行编译链接,编译器可能只重新编译了几个进行修改的源文件然后再与老文件进行链接生成了新的可执行程序。也可能出现偏激的情况,因为源文件的个数过多,修改一个两个,编译器没有发现这两个文件被修改了,所有没有进行重新编译链接,此时的可执行程序还是老版本。
-
makefile中注释使用
#
.PHONY:mybin
mybin:test.c
gcc -o mybin test.c
clean:
rm -f mybin
-
.PHONY:mybin
:将mybin目标文件进行修饰,修饰为一个伪目标,一旦被修饰为伪目标,则修饰的目标文件的依赖方法总是被执行。 -
通常建议将clean修饰为伪目标
mybin:test.c
gcc -o mybin test.c
.PHONY:clean
clean:
rm -f mybin
变量
$@
:$@代表目标文件$^
:$^代表依赖文件列表cc=gcc
flag=-o
bin=mybin
src=test.c
cc=gcc
flag=-o
bin=mybin
src=mybin
$(bin):$(src)
$(cc) $(flag) $@ $^
.PHONY:clean
clean:
rm -f $(bin)
make/makefile语法推导过程
mybin:test.o
gcc -o mybin test.o
test.o:test.s
gcc -c -o test.o test.s
test.s:test.i
gcc -S -o test.s test.i
test.i:test.c
gcc -E -o test.i test.c
.PHONY:clean
clean:
rm -f mybin test.o test.s test.i
正向推导依赖关系,逆向执行依赖方法
时间
-
stat filenam
-
Access:最近访问时间
-
Modify:内容修改时间
-
Change:属性修改时间
-
内容修改时间变化的时候,通常属性修改时间联动改变。
-
access不是每次访问都更新,而是根据操作系统设置的策略进行更新,可能是达到一定的访问次数才更新。
-
touch test.c
对文件的acm时间进行更新
小技巧
先把makefile写通,再写项目代码。