日期:2014-05-16  浏览次数:20651 次

关于makefile的vpath
代码如下
============================
vpath %.c sources
vpath %.h headers
objs = test.o trangle.o circle.o
test: $(objs)
gcc -o $@ $(objs)
trangle.o: sq.h 
circle.o: pi.h 

.phony:clean
clean:
-rm test *.o
=============================

当前目录下,headers/  sources/ makefile
headers下,pi.h sq.h
sources下 ,trangle.c circle.c

make不过,提示如下
=============================
cc    -c -o trangle.o sources/trangle.c
sources/trangle.c:1:16: 致命错误:sq.h:没有那个文件或目录
编译中断。
make: *** [trangle.o] 错误 1
==============================
不知道为什么。。
如果把五个文件都放一起,可以通过。。

------解决方案--------------------
cc的时候 -I指定下头文件的目录
------解决方案--------------------
vpath %.h ../headers
其含义是:Makefile中出现的.h文件;如果不能在当前目录下找到,则到目录“../headers”下寻找。注意:这里指定的路径仅限于在Makefile文件内容中出现的.h文件。 并不能指定源文件中包含的头文件所在的路径(在.c源文件中所包含的头文件路径需要使用gcc的“-I”选项来指定,可参考gcc的info文档)。