Makefile:从模式列表创建规则
在我的目录中,我有许多名为 A.xxx A01.xxx A02.xxx A03.xxx B.xxx B01.xxx Z 我想创建如下规则Makefile:从模式列表创建规则,makefile,Makefile,在我的目录中,我有许多名为 A.xxx A01.xxx A02.xxx A03.xxx B.xxx B01.xxx Z 我想创建如下规则 A.yyy : A.xxx command type 1 A01.yyy : A01.xxx A.xxx command type 2 B.yyy : B.xxx command type 1 B01.yyy : B01.xxx B.xxx command type 2 Z01.yyy: Z01.xxx
A.yyy : A.xxx
command type 1
A01.yyy : A01.xxx A.xxx
command type 2
B.yyy : B.xxx
command type 1
B01.yyy : B01.xxx B.xxx
command type 2
Z01.yyy: Z01.xxx
command type 3
有人能给我一个提示吗
我尝试了类似的方法(对于命令1和命令3似乎没问题,但是在命令2中,我不知道如何放置第二个perequisit)
您应该阅读的文档的两个重要部分包括:
- ,尤其是最短杆规则:
A.yyy
、A01.yyy
和Z01.yyy
分别难以拥有3种不同的模式规则。但是,使用eval函数,您可以使用列表
变量中的可用信息为A.yyy
和B.yyy
生成非模式规则,并为其他目标生成正确的模式规则(假设根据名称前缀做出决定):
请注意,不会为
A01.yyy
和B01.yyy
选择回退解决方案(command 3
),因为LIST\u规则
模板中的模式规则会导致较短的干(01
而不是A01
或B01
)您的问题不清楚。您希望它如何构建A02.yyy
?是否有一个B05.xxx
?我试图解决我的问题。例如A02.yyy:A02.xxx A.xxx;cat$+>$@我可以有数百个类型的文件,或者A…xxx B…xxx和C…xxx D…xxx,所以我需要一个包含所有前缀A B C D的列表,因为我不想手动点全部。当A是列表的一部分时,有没有办法从字符串A中提取字符串A?你可以找到答案,但是它涉及到一些先进的制造技术。非常感谢,我会试试这个。作为makefiles的新用户,这似乎是一个艰难的挑战:很好的挑战!!
list:= A B
source=$(wildcard *.xxx)
compi:=$(patsubst %.xxx, %.yyy, $(source))
list_pattern=$(addsuffix %, $(list))
list_yyy=$(addsuffix .yyy, $(list))
list_nb_yyy=$(filter $(list_pattern), $(compi))
%.yyy:%xxx
@echo $@ - $+ - command 3
all: $(compi)
.SECONDEXPANSION:
$(list_yyy): $$(patsubst %.yyy, %.xxx, $$@)
@echo $@ - $+ - command 1
$(list_nb_yyy): $$(patsubst %.yyy, %.xxx, $$@)
@echp $@ - $+ - command 2
list:= A B
source=$(wildcard *.xxx)
compi:=$(patsubst %.xxx, %.yyy, $(source))
all: $(compi)
define LIST_RULE
$(1).yyy: $(1).xxx
@echo $$@ - $$+ - command 1
$(1)%.yyy: $(1)%.xxx $(1).xxx
@echo $$@ - $$+ - command 2
endef
$(foreach l,$(list),$(eval $(call LIST_RULE,$(l))))
%.yyy: %.xxx
@echo $@ - $+ - command 3