Makefile学习笔记1

学习Makefile的总结

参考文件是: 跟我一起写 Makefile     作者:陈皓

:冒号前面表示目标文件, 后面表示依赖文件

$ 是引用符号,后面一般跟变量名,常见的形式有:edit :$(objects),objects表示定义的一个变量

.PHONY表示其后的是一个伪目标文件,例如:.PHONY: clean

清空目标文件的规则:另一种做法:

两者没有什么太大区别,后者只是更严谨一些,就是利用rm指令将最终生成的可执行文件edit和中间文件objects所指代的文件删掉。

Makefile中只有行注释,和UNIX的Shell脚本一样,其注释是用“#”字符,这个就像C/C++中的“//”一样。如果你要在你的Makefile中使用“#”字符,可以用反斜框进行转义,如:“\#”。

最后,还值得一提的是,在Makefile中的命令,必须要以[Tab]键开始

Makefile文件名命名

默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、“makefile”、“Makefile”的文件,找到了解释这个文件。在这三个文件名中,最好使用“Makefile”这个文件名,因为,这个文件名第一个字符为大写,这样有一种显目的感觉。最好不要用“GNUmakefile”,这个文件是GNU的make识别的。有另外一些make只对全小写的“makefile”文件名敏感,但是基本上来说,大多数的make都支持“makefile”和“Makefile”这两种默认文件名。

当然,你可以使用别的文件名来书写Makefile,比如:“Make.Linux”,“Make.Solaris”,“Make.AIX”等,如果要指定特定的Makefile,你可以使用make的“-f”和“--file”参数,如:make -f Make.Linux或make --file Make.AIX。

引用其他Makefile的方法

include的语法是: include <filename>

filename可以是当前操作系统Shell的文件模式(可以保含路径和通配符) 在include前面可以有一些空字符,但是绝不能是[Tab]键开始。include和<filename>可以用一个或多个空格隔开。举个例子,你有这样几个Makefile:a.mk、b.mk、c.mk,还有一个文件叫foo.make,以及一个变量$(bar),其包含了e.mk和f.mk,那么,下面的语句:

include foo.make *.mk $(bar)

等价于:

include foo.make a.mk b.mk c.mk e.mk f.mk

make指令在寻找其他Makefile文件时,如果出现两遍都找不到的情况,就会报错,想要避免这种情况发生的方法是:如果你想让make不理那些无法读取的文件,而继续执行,你可以在include前加一个减号“-”。 如: -include <filename>

环境变量 MAKEFILES,一般不要定义,因为比较容易出现问题。

Makefile的语法规则

targets : prerequisites

command

...

或是这样:

targets : prerequisites ; command

command

command是命令行,如果其不与“target:prerequisites”在一行,那么,必须以[Tab键]开头,如果和prerequisites在一行,那么可以用分号做为分隔

如果命令太长,你可以使用反斜框(‘\’)作为换行符。

make支持三各通配符:“*”,“?”和“[...]”, 如“*.c”表示所以后缀为c的文件

让objects的值是所有[.o]的文件名的集合,那么,你可以这样:objects := $(wildcard *.o)

Makefile中的文件搜索

VPATH = src:../headers   前面的的定义指定两个目录,“src”和“../headers”,make会按照这个顺序进行搜索。目录由“冒号”分隔。(当然,当前目录永远是最高优先搜索的地方)。

另一个设置文件搜索路径的方法是使用make的“vpath”关键字(注意,它是全小写的),这不是变量,这是一个make的关键字,这和上面提到的那个VPATH变量很类似,但是它更为灵活。它可以指定不同的文件在不同的搜索目录中。这是一个很灵活的功能。它的使用方法有三种:

1、vpath <pattern><directories> 为符合模式<pattern>的文件指定搜索目录<directories>。

2、vpath <pattern> 清除符合模式<pattern>的文件的搜索目录。

3、vpath 清除所有已被设置好了的文件搜索目录。

如果我们连续的使用vpath,则其执行顺序是按照我们使用的顺序来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值