GNU Make:如果字符串包含 "dirToExclude",则从带有子目录的数组中删除字符串

GNU Make: Remove string from array with subdirectories if string contains "dirToExclude"

我有一个目录,其中包含许多包含源文件的子目录。因此,我正在寻找 .c 文件的每个子目录:cSources = $(shell dir /s /b *.c)

但是有些子目录包含我不想编译的源文件。如果我有一个变量 dirToExclude = dirName,我如何删除 cSources 中包含 'dirName' 的每个字符串?

我知道有 findstring 功能。但是我不知道如何在数组中的每个字符串上使用 findstring 。我正在寻找一些方法来获得像(伪代码)这样​​的嵌套循环:

foreach (var in cSources)
   if (var.contains(dirToExclude))
       cSources -= var
   endif

如果您知道 dirToExclude 总是在字符串的开头,您可以只写:

cSources := $(filter-out $(dirToExclude)%,$(cSources))

如果你想删除字符串出现在任何地方的任何文件名,你可以使用:

cSources := $(foreach S,$(cSources),$(if $(findstring $(dirToExclude),$(S)),,$(S)))

https://www.gnu.org/software/make/manual/html_node/Functions.html