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
我有一个目录,其中包含许多包含源文件的子目录。因此,我正在寻找 .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