简单使用Makefile
Makefile
介绍
- Makefile 里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。
copy
- 1
- 2
- 3
- 4
- 5
#--注释--
target ...: prerequisites ...
command
...
...
target
:可以是一个或多个目标文件、标签、执行文件。prerequisites
:生成该target
所依赖的文件和/或target
。- 如果有一个以上的文件比
target
文件要新或者target
不存在的话,command
命令就会被执行。
- 如果有一个以上的文件比
command
:该target
要执行的命令(任意的shell命令)。
常用语法
- 可以声明变量存储信息,简化命令。用
$
符使用该变量。copy- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
objects = main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o edit : $(objects) cc -o edit $(objects) include foo.make *.mk $(bar) #引入其他makefile文件 .PHONY : clean #伪目标clean,避免和文件重名,只是一个标签 clean : -rm edit $(objects)
- make 看到一个 .o 文件,它就会自动的把 .c 文件加在依赖关系。
- 如果 make 找到一个 whatever.o ,那么 whatever.c 就会是 whatever.o 的依赖文件。并且 cc -c whatever.c 也会被推导出来。
rm
命令前面加了一个小减号的意思就是,也许某些文件出现问题,但不要管,继续做后面的事- 如果make执行时,有
-I
或--include-dir
参数,那么在这个参数所指定的目录下去寻找文件。 - 支持通配符
* ? ~
- 特殊变量
VPATH
,如果定义了这个变量,那么,make 就会在当前目录找不到的情况下,到所指定的目录中去找寻文件。- e.g.
VPATH = src:../headers
,用冒号分隔。
- e.g.
copy
- 1
- 2
bigoutput littleoutput : text.g
generate text.g -$(subst output,,$@) > $@
$
表示执行一个 Makefile 的函数,函数名为subst
$@
表示目标的集合,就像一个数组
makefile的工作流程
- 当只输入make命令时,会经历如下基本过程
- 会在当前目录下找名字叫“Makefile”或“makefile”的文件。
- 如果找到,读入包含文件,初始化文件中的变量,找文件中的第一个目标文件(target)。
- 如果第一个目标文件不存在或者比依赖项旧,则会执行后面的命令重新生成目标文件。
- 如果需要的依赖文件不存在,会寻找生成该文件的规则。
本文作者:oniisan
本文链接:https://www.cnblogs.com/oniisan/p/makefile.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步