如何使用GNUMake的通配符功能排除特定文件?

时间:2017-07-03 03:28:50

标签: unix grep gnu-make

我项目的目录结构如下:

enter image description here

我的Makefile看起来像这样:

dir1_contents := $(wildcard dir1/*) 
dir3_contents := $(wildcard dir3/*)

all: clean_dir1 clean_dir3

clean_dir1:
    echo 'dir1_contents = $(dir1_contents)'

clean_dir3:
echo 'dir3_contents = $(dir3_contents)'

当我运行make时,这就是我得到的:

$ pwd
make-test

$ make -s
dir1_contents = dir1/dir2 dir1/file2.junk dir1/file3.junk
dir3_contents = dir3/file4.junk

我想在dir1中获取dir1_contents的内容。但我想从该列表中排除file3.junk。我该怎么做?

也许我应该使用grep -v?但我不确定这是最好的方式。我可以在这里使用内置的GNUMake功能吗?

1 个答案:

答案 0 :(得分:2)

使用$(filter-out 模式文字 ) text function

 $(filter-out file3.junk,${dir1_contents})

(有人建议使用%/file3.junk代替file3.junk,但我相信您不需要;我让您去实验)