如何使用Make列出某个目录中的所有源文件

时间:2014-11-24 06:37:08

标签: foreach makefile gnu-make

我试图在make项目中列出所有相关的源文件,以便过滤掉在单元测试期间生成的代码覆盖率报告的相关部分。

到目前为止我的解决方案运行良好,但有一个缺陷,即它不会列出子目录中的文件。它仅列出指定目录的根目录中的文件。

USER_DIR设置为源文件的位置。它可以包含多个目录。然后,以下行将创建用于从代码覆盖率报告中过滤掉相关文件的列表:

SRCEXTS = .c .cc .cpp
HDREXTS = .h .H .hh .hpp .HPP .h++ .hxx .hp

SW_SOURCE := $(foreach d,$(USER_DIR),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))
SW_HEADERS := $(foreach d,$(USER_DIR),$(wildcard $(addprefix $(d)/*,$(HDREXTS))))

我如何改变我的解决方案,以便它还能在USER_DIR的所有子目录中找到文件?或者,当然,如果有更好的方法,而不是我也有兴趣的foreach,但我想我想保留列表的格式。

1 个答案:

答案 0 :(得分:0)

这就是我最终做的事情:

SW_SOURCE := $(foreach ext, $(SRCEXTS), $(foreach d, $(USER_DIR), $(shell find $(d) -name '*$(ext)')))
SW_HEADERS := $(foreach ext, $(HDREXTS), $(foreach d, $(USER_DIR), $(shell find $(d) -name '*$(ext)')))

循环遍历扩展和目录,并使用find检索文件。也许不是最有效的方式,但它确实存在。