具有多个文件扩展名的Makefile通配符

具有多个文件扩展名的Makefile通配符,makefile,Makefile,在makefile中,我处理给定扩展名的所有文件 我在现实世界中将这一点简单化,因为我知道“我需要做什么”,所以更有意义 以下工作: MY_FILES = $(wildcard *.ex1) BASENAMES = $(basename $(MY_FILES)) .PHONY: run run : $(MY_FILES) for name in $(BASENAMES); do\ # do what I need to do done .PHONY: clea

在makefile中,我处理给定扩展名的所有文件

我在现实世界中将这一点简单化,因为我知道“我需要做什么”,所以更有意义

以下工作:

MY_FILES = $(wildcard *.ex1)
BASENAMES = $(basename $(MY_FILES))

.PHONY: run
run : $(MY_FILES)
    for name in $(BASENAMES); do\
        # do what I need to do
    done

.PHONY: clean
clean :
    # clean up the mess

现在我想做的不仅仅是处理*.ex1,还要处理十几个其他文件(但所有文件都是以同样的方式处理的,所以在“做我需要做的事情”中没有文件类型的区别)。文件扩展名不遵循任何模式。那么,编写多个文件扩展名通配符的最方便的方法是什么呢?

如果十几个文件总是相同的,那么您可以这样硬编码它们

MY_FILES = $(wildcard *.ex1)
MY_FILES += filename.foo
MY_FILES += filename.bar
MY_FILES = $(wildcard *.ex1)
MY_FILES += $(wildcard *.foo)
MY_FILES += $(wildcard *.bar)
或者,如果扩展总是相同的,那么像这样

MY_FILES = $(wildcard *.ex1)
MY_FILES += filename.foo
MY_FILES += filename.bar
MY_FILES = $(wildcard *.ex1)
MY_FILES += $(wildcard *.foo)
MY_FILES += $(wildcard *.bar)
有关更多信息,请参见此处:

如果它们并不总是相同的,那么你必须让它们遵循某种模式。例如,将它们全部放在某个目录中

MY_FILES = $(wildcard somedir/*)

不,他们不是。这次是100个*.ex1,下次是66个*.ex2,或者是这批货的任何组合。啊,你编辑了这个,谢谢。如果没有更简单的方法来处理这十几行额外的代码,第二个案例就足够了。这会奏效的。我没有意识到你可以连接或合并结果,你也可以这样写:
MY_FILES=$(wildcard*.ex1*.foo*.bar)
如果你想把所有内容都放在一行中。这很有效,但似乎没有记录