makefile vpath和VPATH小结

一:先看VPATH吧。
我们看到跟我一起学makefile当中的这段话。
在这里插入图片描述
注意点有两点,
(1)make只会在当前的目录下去寻找依赖文件和目标文件。
(2)使用VPATH的方法,这点相对容易一些。

我们先看第一点是什么意思。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这是当前的目录结构。

makefile的第一版是这样写的。

#vpath %.c src
#vpath %.h inc

VPATH = src:inc

target : main.o g_a.o g_b.o
        gcc -o target main.o g_a.o g_b.o
main.o : main.c g_a.h g_b.h
        gcc -c main.c -o main.o
g_a.o : g_a.c g_a.h
        gcc -c g_a.c -o g_a.o
g_b.o : g_b.c g_b.h
        gcc -c g_b.c -o g_b.o

.PHONY : clean

clean :
        -rm target g_a.o g_b.o main.o

在这里插入图片描述
报错了,提示我们找不到文件在哪里,这就涉及到VPATH的理解了,上面说make只会在当前的目录下去寻找依赖文件和目标文件,以

main.o : main.c g_a.h g_b.h
        gcc -c main.c -o main.o

举例,有了VPATH这个变量,只是会让执行make命令时,找到依赖项的main.c g_a.h g_b.h文件而已,但是执行gcc命令时,他不知道main.c文件在那里。所以我们需要改一下。

makefile的第二版,使用自动变量

VPATH = src:inc

target : main.o g_a.o g_b.o
        gcc -o $@ $^
        @echo $@
        @echo $^
main.o : main.c g_a.h g_b.h
        gcc -o $@ -c $<
        @echo $@
        @echo $<
g_a.o : g_a.c g_a.h
        gcc -o $@ -c $<
        @echo $@
        @echo $<
g_b.o : g_b.c g_b.h
        gcc -o $@ -c $<

在这里插入图片描述
看输出情况,使用了自动变量以后,可以找到源文件在那里了,但是提示找不到相应的头文件,看来需要我们使用-I命令把头文件目录给加进去。

第三版:

   gcc -o $@ $^
        @echo $^
        @echo $@
main.o : main.c g_a.h g_b.h
        gcc -c $< -o $@ -I inc
        @echo $@
        @echo $<
g_a.o : g_a.c g_a.h
        gcc -c $< -o $@ -I inc
        @echo $@
        @echo $<
g_b.o : g_b.c g_b.h
        gcc -c $< -o $@ -I inc
        @echo $@
        @echo $<

.PHONY : clean

clean :
        -rm target g_a.o g_b.o main.o

最后顺利通过编译。

二:vpath(小写)
是makefile当中的一个关键字,用法的话,具有匹配模式。例如

vpath %.h ./headers

headers在搜索所有的头文件等等。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值