0.背景
在不断地工作学习过程中,我们可能会接触到很多新技术,新知识,但是回首整个计算机架构,那些支撑整个软件世界的东西却并未发生巨大的改变,《计算机组成原理》《深入理解计算机系统》《编译原理》《算法导论》《计算机网络》…太多黑皮书尘封在书架上了,在追逐新技术新知识的过程中逐渐丢失了,我们作为程序员最应该了解和知道的知识。
本文也是作者的一次思考与尝试,从官方文档的角度去学习理解Make,提升自己静心阅读官方文档的能力。
1.关于Make
GNU Make
make是一条计算机指令,是在安装有GNU Make的计算机上的可执行指令。该指令是读入一个名为makefile [1] 的文件,然后执行这个文件中指定的指令。
有时make又指GNU Make,GNU Make 是一个用来控制可执行文件和其他一些从源文件来的非源代码文件版本的软件。
Make可以从一个名为makefile的文件中获得如何构建你所写程序的依赖关系,Makefile中列出了每个目标文件以及如何由其他文件来生成它。 当你编写一个程序时,你可以为它编写一个makefile文件,这样你就可以使用Make来编译和安装这个程序。
官方网站:https://www.gnu.org/software/make/
文档链接:https://www.gnu.org/software/make/manual/make.pdf
可以直接进行下载,或选择你喜欢的文档
2.一些基础软件的准备
(1).Linux环境
这里就不讨论如何获取Linux环境了,博客很多
Windows:可以使用虚拟机/WSL/Cywin…各种可以模拟Linux的环境
笔者使用的环境如下:
WSL—Windows for Linux ubuntu 18.04
WSL安装教程
Mobaxterm
连接教程
Mobaxterm连接WSL可视化界面
#查看机器的信息
cat /etc/issue
#笔者的电脑显示如下
Ubuntu 18.04.1 LTS \n \l
(2).GCC与Make
#安装gcc与make
sudo apt install gcc make
#查看安装的gcc版本
gcc -v
#查看g++版本,gcc主要是C语言编译,g++主要是C++的编译,我们后续的例子中多以C++为例
g++ -v
#查看安装的make版本
make --version
笔者对应的
gcc版本:gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
make版本:GNU Make 4.1
3.HelloWorld
Makefile文件由类似如下的一条或多条规则组成
target ... : prerequisites ...
recipe
...
...
...
# target------需要生成的文件名或命令名,常见的比如可执行文件(.exe或Linux的a.out等)/目标文件(.o/.so)
#prerequisites------生成target所需要的文件名,可以为空
#recipe------完成prerequisites到target转换的命令
注意:recipe之前一定得是Tab键,不能是4个空格
mkdir 0_HelloWorld && cd 0_HelloWorld
vim Makefile
Makefile
# Makefile Hello World
all:
echo "Hello World!"
保存之后执行命令:make all或者make
可见,我们在Makefile中书写的规则得到了执行,其实相当于直接调用shell命令echo “Hello World!”
恭喜,又掌握了一种Hello World的方法
-1.一些小技巧
vim 编辑过程中临时将4个空格转换为Tab键
:set noexpandtab