SmartVessel

Foucs on C++

博客园 首页 新随笔 联系 订阅 管理

在我们为一个具体任务编写程序时,通常都以项目树的形式来组织源代码的布局,而不会仅有一个源程序,对于这种情况,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 才是更好的选择。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lijiangshui/archive/2007/01/26/1495199.aspx

posted on 2009-10-16 15:46  SmartVessel  阅读(833)  评论(0编辑  收藏  举报