博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
makefile
阅读量:5272 次
发布时间:2019-06-14

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

对新人挺友好的。

==============================

target ... : prerequisites ...

command
...
...

 

target通常是一个目标文件,也可以是一个操作(伪目标)。

prerequisites就是,要生成那个target所需要的。
command也就是make需要执行的命令。(任意的Shell命令)
这是一个文件的依赖关系,即target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。

如果target不存在,或者prerequisites中如果有文件比target文件要新的话,command所定义的命令就会被执行。

而如果prerequisites中有文件不存在,则递归去执行生成该文件的命令。
这就是Makefile的规则。也就是Makefile中最核心的内容。

具体使用时,无参数的make会使用第一个目标指令;make xxxx会使用xxxx指令,如果目录中已经存在xxxx,则不执行。

如果target是一个操作(伪目标),而目录中有名为target的文件,按上述规则,则该target不会执行。
为了避免这种情况,可以用“.PHONY”明确声明为伪目标。

 

隐含规则

 编译C/C++时,<n>.o 的目标会自动推导为 <n>.c / <n>.cpp

# Makefile 中main : main.o    gcc -o main main.o#会自动变为:main : main.o    gcc -o main main.omain.o: main.c    <-- main.o 这个目标是隐含生成的 gcc -c main.c

更多隐含规则请戳

转载于:https://www.cnblogs.com/dirge/p/9090309.html

你可能感兴趣的文章
android 沉浸式状态栏
查看>>
JS中Object的一些关于原型的方法
查看>>
作业9
查看>>
如需空数组,请勿用undef赋值
查看>>
print 函数的进一步理解
查看>>
luogu1377 树的序 (线段树)
查看>>
Poj 1014
查看>>
脏字过滤(基于hash的优化算法)
查看>>
加载使div显示右下角
查看>>
java方法重载 与 重写
查看>>
ViewState 和字段属性的差异
查看>>
spring MVC、mybatis配置读写分离,ReplicationDriver(转载)
查看>>
第一节:对应拼音编码查询(后续更新)
查看>>
Java新书推荐——《疯狂 Java 程序员的基本修养》
查看>>
matlab基础知识复习注意点
查看>>
GIT
查看>>
应当重视的asp.net应用程序安全缺陷
查看>>
加入我的技术群我们一起交流
查看>>
JavaScript 模块化编程(笔记)
查看>>
Javascript -- 常用代码规范
查看>>