GNU Make 学习笔记(二)

在我们为一个具体任务编写程序时,通常都以项目树的形式来组织源代码的布局,而不会仅有一个源程序,对于这种情况,Make 程序就必须到很多个目录中去搜寻依赖目标,如何完成这一任务呢?GNU Make程序给了我们两个非常有用的变量:VPATH 和 vpath。通过这两个变量,可以帮助我们写出有效的 makefile 文件,来完成多个目录的 make 工作。

假设我们有一个工程,项目树布局如下所示:

calc/
|-- makefile
|-- include/
|   `-- calc.h
`-- src/
    |-- add.c
    `-- main.c

它完成的任务很简单,在主程序里调用运算函数完成指定的算术运算,例如四则运算等(为简化说明,示例工程中只包含加法运算)。因此,我们可以写出如下的 makefile:

CC = gcc
CPPFLAGS = -I./include
VPATH = src include

calc: main.o add.o
    $(CC) -o $@ $^
    $(RM) $^
main.o: main.c calc.h
add.o: add.c

在shell中运行make,可以看到如下输出结果:

gcc -o calc src/main.o src/add.o
rm -f src/main.o src/add.o

可见,通过给 VPATH 变量赋值,make 程序会自动到 VPATH 变量中指定的目录下搜寻依赖目标,而不用我们手动去指定了。VPATH 变量的内容就是目录列表,通过空格或冒号分隔(windows上是空格或分号,所以最好用空格)。但是 VPATH 变量有一个缺点,就是搜索一个依赖目标时,make 会遍历 VPATH 中的每个目录,如果有同名文件话就很容易出现问题,解决的方法是使用 vpath 变量,它可以指定到哪个目录下搜索哪类目标,语法如下:

vpath 模式 目录列表

例如,我们可以把上面的 makefile 改成

vpath %.c src
vpath %.h include

这样,make 程序就知道,应该到 src 目录下搜索 .c 文件,到 include 目录下搜索 .h 文件。

要强调的一点是,通过 VPATH 和 vpath 变量,我们可以完成源代码放在多个目录下的 make 工作,但是对于更大的工程,只是通过 VPATH 和 vpath 是不够的,autoconf 和 automake 才是更好的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值