博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入学习Make命令和Makefile(下)(2)
阅读量:4045 次
发布时间:2019-05-25

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



二、内部规则

迄今为止,我们已经能够在makefile中给出相应的规则来指出具体的处理过程。实际上,除了我们显式给出的规则外,make还具有许多内部规则,这些规则是由预先规定的目标、依赖文件及其命令组成的相关行。在内部规则的帮助下,可以使makefile变得更加简洁,尤其是在具有许多源文件的时候。现在以实例加以说明,首先建立一个名为foo.c的C程序源文件,文件内容如下所示:

#include
#include
int main()
{
printf(“Hello World\n”);
exit(EXIT_SUCCESS);
}

现在让我们用make命令来编译它:

$ make foo
cc foo.c -o foo
$

您会惊奇地发现,尽管我们没有指定makefile,但是make仍然能知道如何调用编译器,并且调用的是cc而不是gcc编译器。这在Linux上没有问题,因为cc常常会链接到gcc程序。这完全得益于make内建的内部规则,另外这些内部规则通常使用宏,所以只要为这些宏指定新的值,就可以改变内部规则的默认动作,如下所示:

$ rm foo

$ make CC=gcc CFLAGS=”-Wall -g” foo

gcc -Wall -g foo.c -o foo
$

用make命令加-p选项后,可以打印出系统缺省定义的内部规则。它们包括系统预定义的宏、以及产生某些种类后缀的文件的内部相关行。内部规则涉及的文件种类很多,它不仅包括C源程序文件及其目标文件,还包括SCCS文件、yacc文件和lex文件,甚至还包括Shell文件。

当然,我们更关心的是如何利用内部规则来简化makefile,比如让内部规则来负责生成目标,而只指定依赖关系,这样makefile就简洁多了,如下所示:

main.o: main.c def1.h
f1.o: f1.c def1.h def2.h
f2.o: f2.c def2.h def3.h

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

你可能感兴趣的文章
Hive 中分区是否越多越好?
查看>>
Hive 的分桶表是什么?有什么作用?
查看>>
Hive 桶表是否可以通过直接 load 将数据导入?
查看>>
Hive 分区和分桶的区别?
查看>>
order by,sort by,distribute by,cluster by的区别是什么?
查看>>
聚合函数是否可以写在order by后面,为什么?
查看>>
什么情况下 Hive 可以避免进行 MapReduce?
查看>>
Hive 的文件存储格式怎么选择?
查看>>
Hive 的数据压缩格式怎么选择?
查看>>
Hive 的 SerDe 是什么?
查看>>
Hive 中如何解决多字符分割场景?
查看>>
一篇文章搞懂 Hive 的调优思路
查看>>
HBase是什么?有什么特点?
查看>>
HBase 和 RDBMS 相比有什么区别?
查看>>
一篇文章搞懂 HBase 的整体架构
查看>>
HBase 表的数据模型是什么?
查看>>
3 张图搞懂 HBase 的存储原理.md
查看>>
一篇文章搞懂 HBase 的 flush 机制和 compact 机制
查看>>
一篇文章搞懂 HBase 的 region 拆分机制
查看>>
HBase 表的预分区是什么?为什么要预分区?如何预分区?
查看>>