博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Makefile学习之路——1
阅读量:5961 次
发布时间:2019-06-19

本文共 1054 字,大约阅读时间需要 3 分钟。

编写makefile,不是一个猛子扎进去试着写一个规则并对之调试,而应该先采用面向依赖关系的思考方法勾勒出makefile要表达怎样的依赖关系,这一点尤为重要。通过不断地练习这种思考方法,才可能达到流畅地编写makefile的能力.

分别编写好两个源文件之后,执行效果如下:

makefile文件为:

1 all:main.o foo.o2     gcc -o app main.o foo.o3 main.o:main.c4     gcc -o main.o -c main.c5 foo.o:foo.c6     gcc -o foo.o -c foo.c7 clean:8     rm app main.o foo.o

为什么第二次make还是又生成了app这个可执行文件呢?

make是通过文件的时间戳来判定哪些文件需要编译的,所以如果电脑系统时间变更,将可能影响make的执行。由于第二次make的时候,虽然foo和main的目标文件已经生成了,但all目标在编译过程中并不生成,所以在此执行make,又生成了app,更改makefile(红色部分为更改部分)如下:

1 app:main.o foo.o2     gcc -o app main.o foo.o3 main.o:main.c4     gcc -o main.o -c main.c5 foo.o:foo.c6     gcc -o foo.o -c foo.c7 clean:8     rm app main.o foo.o

这样再有多次执行make并且文件时间戳没有改变时,make会提示你:

make: 'app' is up to date.//app已经是最新的。

我们对foo.c做点改动,看make是否可以发现我们的改动并重新编译,注意make是按照时间戳来判定文件是否有改动的,touch命令可以改变文件的时间戳,这相当于对文件做了一次修改。

touch:将文件的访问及修改时间都更新成目前时间,如果文件不存在,则创建一个字节数为0的空文件。

 

 可以看到touch之后时间戳改变,然后我们make试试。

果然,make察觉到了foo.c的更改,并重新构建了。

现在的makefile虽然能够工作,但不够灵活,下面的文章让makefile更专业。

 

 

 

并不一定非要命名为makefile,但是linux设计哲学是简单就是美,所以当不用 -f 指定文件的时候,make默认以Makefile或者makefile查找:

 

转载地址:http://ikjax.baihongyu.com/

你可能感兴趣的文章
Guava——使用Preconditions做参数校验
查看>>
iSCSI存储用作Proxmox VE的LVM共享存储
查看>>
Sonnet Suite Pro v11.52-ISO 1CD(三维高频电子设计)
查看>>
linux网络
查看>>
我的友情链接
查看>>
linux 系统调优步骤 例
查看>>
显式方法与隐式方法
查看>>
Android防火墙+流量统计代码
查看>>
通知中心
查看>>
我的友情链接
查看>>
MVC中的三个模块
查看>>
Line: 220 - com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1
查看>>
oracle 常用命令大汇总
查看>>
2012年春运火车票电话和网上订票技巧、攻略
查看>>
根据request获取请求路径
查看>>
mysql 并行复制
查看>>
傲不可长,欲不可纵,乐不可极,志不可满——提高个人修养
查看>>
linux系统增加swap容量的方法
查看>>
后台调用gps
查看>>
HTML5标签的语义认知和理解(1)
查看>>