文章目录
GUN Make in Detail for Beginners
本篇主要内容翻译自 初学者的Make指南,也添加了一些其他内容。
Make 简介
一个较大的项目往往包含几千行代码,数个源文件,储存在不同的子目录下。除此之外,还可能包含多个组件。这些组件之间存在着复杂的内部依赖。举个例子:
为了编译组件X,我们首先需要编译Y
为了编译组件Y,我们首先需要编译Z
……
假设我们对X做了一点点修改,却需要手动从Z开始一个个编译,不仅麻烦耗时,还容易出错。
这时候 make 就来解决这个问题啦。我们可以为项目创建Makefile文件(小写的makefile也可以),其中规定了组件之间的依赖,因此在编译的时候会按照满足组件间依赖关系的顺序。
当只对项目中的某个组件A修改了一点点时,make只会重新编译被修改的组件A和任何依赖组件A的其它组件。
除了组件之间的依赖关系,Makefile文件还能够描述项目结构,源文件位置,编译参数,输出位置等内容。当执行make命令时,就会按照当前目录下的Makefile来编译项目。
Makefile的编写类似shell脚本,在之后会详细介绍
一个简单的项目实例
我们用C语言编写一个 “Hello World” 项目,并用make来编译它,在Makefile里设置编译后的可执行文件位置。以下是项目代码
module.h
# include <stdio.h>
void sample_func()
module.c
# include "module.h"
void sample_func() {
printf("Hello World!\n");
}
main.c
# include "module.h"
void sample_func();
int main() {
sample_func();
return 0;
}
项目目录:
HelloWorld
├── Makefile
├── main.c
├── module.c
└── module.h
那么如果要手动编译HelloWorld项目,生成一个能输出 Hello World! 的可执行程序,该怎么做呢?
依次在当前目录输入以下命令:
gcc -I .