make命令和makefile文件

1 痛点——重复编译

编写简单程序时,程序员会在编辑完源程序文件后重新编译所有文件来重建应用程序。但对大型程序来说,使用这种简单的处理方式会带来一些明显的问题:编辑—编译—测试这一循环的周期将变长,如果仅仅改动一个源文件,需要重新编译所有的源文件。另外,在多个头文件的项目中,由于每个源文件依赖的头文件可能不一样,更新其中某一个头文件时需要重新编译所有受影响的源文件,这部分工作非常的繁琐而容易出错。

make工具可以完美的解决上述问题。make命令内置了多种智能机制,同时构造了makefile文件,告诉编译器应用程序该如何构造。makefile文件一般和项目的其他源文件放在同一目录下,大的项目可以拥有多个makefile文件分别管理项目的不同部分。

2 makefile的语法

makefile文件由一组依赖关系和规则构成。每个依赖关系由一个目标(即将要创建的文件)和一组该目标所依赖的源文件组成。而规则描述了如何通过这些依赖文件创建目标。一般来说,目标是一个单独的可执行文件。

make命令会读取makefile文件的内容,它先确定目标文件或要创建的文件,然后比较该目标所依赖的源文件的日期和时间以决定该采用哪条规则来构造目标。通常在创建最终的目标文件之前,它需要先创建一些中间目标。make命令会根据makefile文件来确定目标文件的创建顺序以及正确的规则调用顺序。[1]

3 make命令的选项和参数

make程序本身有许多选项,其中最常用的3个选项如下所示:

  • -k:make命令在发现错误时仍然继续执行,可以用此命令发现所有未编译成功的源文件
  • -n:让make命令输出将要执行的操作步骤,而不是真正执行这些操作
  • -f <filename>:告诉make命令将哪个文件作为makefile文件,如果未使用这个选项,标准版本的make命令将首先在当前目录下查找名为makefile的文件,如果该文件不存在,它就会查找名为Makefile的文件。

3.1 依赖关系

依赖关系定义了最终应用程序里的每个文件与源文件之间的关系。依赖关系表示例如下:

myapp: main.o 2.o 3.o
main.o: main.c a.h
2.o: 2.c a.h b.h
3.o: 3.c b.h c.h

<< · Back Index ·>>

发表回复

相关推荐

万店连锁:门店连锁加盟,必修的五种加盟模式

开门店做连锁,是一直做直营好,还是做加盟好?

· 5秒前

沈阳航空航天大学转专业简单介绍(不在更新,只适用于约2020年左右,内容已过时效性)

很多同学可能对自己的专业不满意,或者对其他专业有着强烈的兴趣,或者无法跟上本专业学习内容。每年都会有很多同学考虑转专 ...

· 14秒前

【观展指南】折扇的构成

点击蓝色字体关注我们,查看更多精彩内容!

· 16秒前

新能源电驱动系统中母排的应用分析

现如今新能源汽车渗透率越来越高,大街小巷里随处可见。和以往传统的燃油汽车不同,新能源汽车的电压值、电流值(电力电子, ...

· 24秒前

細說漢字 | 蟲蟲委屈,但蟲蟲不說

“雕蟲小技、狼蟲虎豹、百足之蟲,死而不僵……”在這些我們熟知的成語裡,蟲不是微不足道就是壞;在現實生活中,蟲子也沒那麼討...

· 33秒前