makefile中判断文件是否存在的几种方法

 有两种方式:

1、调用shell命令

if [ -e  FILE ]; then .......; fi

注:文件表达式
-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真 
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真 
-w filename 如果 filename可写,则为真 
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为真

2、使用makefile的wildcard函数

ifneq ($(wildcard FILE,)
    #文件存在
endif

$(wildcard FILE)的意思是当前路径下的FILE文件匹配的文件展开。
假设当前路径下存在a.c 和 b.c,那么执行src=$(wildcard *.c),src的值就为a.c b.c;
如果不使用通配符,比如src=$(wildcard c.c);那么就是要展开当前路径下,文件名为c.c的文件,因为当前路径下文件不存在,因此src为空字符串

 

实例1:

分别使用上述两种方法判断obj文件夹下depend.mk文件是否存在,存在的话创建a.c和b.c文件。

编写的makefile如下:

OBJ_DIR=obj
fileNames = $(wildcard $(OBJ_DIR)/depend.mk)

all:
	@echo "this is all "
	@echo ${fileNames}
	@if [ -e $(OBJ_DIR)/depend.mk ]; then touch b.c; fi


ifneq ($(wildcard $(OBJ_DIR)/depend.mk),)
	touch a.c
endif

执行完后,成功创建了a.c和b.c。

 

 

ref:

https://cloud.tencent.com/developer/ask/62106

https://blog.csdn.net/scm002/article/details/84213758

你可能感兴趣的:(嵌入式linux,makefile)