vpath的简介和使用
搜Makefile文件中的特殊变量“vpath”就是完成这个功能的,如果没有指明这个变量,make只会在当前的目录中去找寻依赖文件和目标文件。如果定义了这个变量,那么,make就会在当前目录找不到的情况下,到所指定的目录中去找寻文件了。
1、vpath
为符合模式
2、vpath
清除符合模式
3、vpath
清除所有已被设置好了的文件搜索目录。
vpath %.h ../headers
vpath错误案例
我在Makefile目录里面建立了一个ss的目录,在此目录里面放了个a.c文件 后在makefile里面这样写到 vpath %.c ss
VPATH=ss
cc=arm-linux-gcc
a:a.c $(cc) -o a a.c
clean: -rm a .o *~ 最后在命令行make,出现 arm-linux-gcc -o a -c a.c arm-none-linux-gnueabi-gcc: a.c: No such file or directory make: ** [a] Error 1
提示找不到目录或者文件,这个要怎么解决呢? 我用vpath制定了c文件在的目录,怎么还是找不到文件呢?
原因:vpath只能告诉make去哪里找文件,你写编译命令行的时候用的是$(cc) -o a a.c ,这就强制gcc在当前目录找当然找不到了。把命令行里面的a.c改成$^就ok了
clean :
rm -f *.o
rm -f cron crontab
#makefile里面执行shell命令的话,需要在命令前加上'$(shell 实际shell命令)',如下所示
$(shell ln -s ../../../../FAW-VW-CRS3.0-37W-Soc/FAW-VW-CRS3.0-37W-System-Sdk/sysroots/armv7ahf-neon-linux-gnueabi/usr/lib/crtn.o)
$(shell ln -s ../../../../FAW-VW-CRS3.0-37W-Soc/FAW-VW-CRS3.0-37W-System-Sdk/sysroots/armv7ahf-neon-linux-gnueabi/usr/lib/crti.o)
$(shell ln -s ../../../../FAW-VW-CRS3.0-37W-Soc/FAW-VW-CRS3.0-37W-System-Sdk/sysroots/armv7ahf-neon-linux-gnueabi/usr/lib/crt1.o )
Makefile中LDFLAGS指的是链接库的路径
LDFLAGS= -L../../../FAW-VW-CRS3.0-MQB-System-Sdk/sysroots/armv7ahf-neon-linux-gnueabi/usr/lib