FC6中Makefile使用VPATH无效?
根据此贴的问题:http://community.csdn.net/Expert/topic/5614/5614465.xml?temp=.8323328
这个朋友的回贴是:
mymtom(mymtom) ( ) 信誉:100 Blog 加为好友 2007-6-24 17:43:31 得分: 50
printf2.o : printf2.c
gcc -c printf2.c
这样写会造成gcc在当前目录下寻找printf2.c, 当然找不到了,改为下面这样就可以了.
printf2.o : printf2.c
gcc -c $ <
我的问题是:
但楼主不是指定了vpath路径了吗,如果当前目录找不到就会到sub目录去找。
如果还要写明$ <的话那vpath的作用是什么?
------解决方案--------------------没想到我结贴了还有人拎出来问,支持一下。
这个问题我已经解决了
设置VPATH只作用在在依赖文件上,如果当前目录找不到就到VPATH下去找
ctest
|
|--hello.c
|--Makefile
|--printf2.h
|--sub
|--printf2.c
当运行如下命令时
printf2.o : printf2.c
gcc -c printf2.c
在ctest目录下gcc自然找不到printf2.c
但是printf2.o : printf2.c中,由于设置了VPATH=./sub,可以找到printf2.c文件
当程序printf2.o : printf2.c
gcc -c printf2.c
改为
printf2.o : printf2.c
gcc -c $ <
运行就可以了,我试过了,可能由于VPATH=./sub,运行时将$ <替换成./sub/printf2.c了吧,呵呵,反正可以正常运行了,哈哈
------解决方案--------------------写printf2.c的话, 会被识别为全路径名, 所以在当前路径下找.
而用$ <的话, makefile会利用隐含规则进行查找VPATH. VPATH可以理解成是makefile的隐含变量, 只有使用makefile变量(如$ < $^等)时才会使用VPATH.
而printf2.c这样的文件名是没有这种特性的.