知识点
make
读取 makefile 文件并执行更新和重建操作- makefile 反斜线的使用
- makefile 中条件语句的基本格式
- makefile 关键字
ifeq
,ifneq
,ifdef
,ifndef
的使用
代码获取
通过在 Terminal 中输入以下命令可以将本课程所涉及到的所有源代码下载到linux环境中,作为参照对比进行学习。
wget http://labfile.oss.aliyuncs.com/courses/849/make_example-master.zip && unzip make_example-master.zip && rm make_example-master.zip
命令执行后 WebIDE 的工作区中将会出现一个名为 make_example-master 的文件夹
本章节的源代码位于 /home/project/make_example-master/chapter3
目录下,请在 Terminal 中通过 cd 命令切换至该目录后再进行实验学习。
1️⃣ make 的两个执行阶段
编写 makefile 文件内容如下:
# this is a makefile example
vari_a = "vari a from makefile"
vari_b = "vari b from makefile"
.PHONY:all
all:
@echo $(vari_a)
@echo $(vari_b)
在 makefile 文件中我们定义了两个变量 vari_a
与 vari_b
,同时我们在执行规则 all
时将他们的值打印输出,现在执行 make
命令,观察输出结果。
新增一个文件 inc_a
,在文件中声明一个变量 vari_b
值为 「vari b from inc_a」。 提供的源代码中已有此文件,内容如下:
# this is a include file for make
vari_b = "vari b from inc_a"
复制代码
修改 makefile 文件,在文件的最后一行通过 include
将 inc_a
包含到 makefile 中。
include inc_a
复制代码
执行 make
命令观察输出结果。
可以发现 vari_b
的值被修改了。
我们知道 make
是按照顺序一行行读入 makefile。 前面介绍make
的第一阶段是读入所有 makefile 文件,include
导入的文件以及环境变量指定的文件。所以解析新修改的 makefile 时,inc_a
应该在第一阶段被解析完毕,所以 vari_b
变量就被 inc_a
修改掉了。
由此说明文件的处理顺序与
include
指示符在 makefile 中的位置无关。