过滤通配符的行为方式与预期不同

时间:2017-09-21 11:47:31

标签: makefile wildcard gnu-make

我试图让以下过滤器语句正常工作,但事实并非如此。 exportedLibaries包含执行文件的文件的相对路径(即export/*/*/*/filename

dev := $(filter HelloWorld%, $(exportedLibraries))

我为我的单元测试使用了类似的过滤器,它运行得非常好(相对路径相同):

unitTests := $(filter %_Test, $(exportedUnitTests))

然而这有效......

dev := $(filter $(wildcard export/**/**/**/HelloWorld*), $(exportedLibraries))

我做错了什么?

1 个答案:

答案 0 :(得分:2)

在这种情况下,

$(notdir)就是你想要的:

exportedLibraries := export/foo/helloworld.lib export/bar/HelloWorld.lib export/baz/HelloWorldTwo.lib

dev := $(foreach lib,$(exportedLibraries),$(if $(filter HelloWorld%,$(notdir $(lib))),$(lib)))

$(info $(dev))

你可以$(strip) $(foreach)的结果来消除结果中的剩余空格。