移动嵌套文件的Makefile规则

移动嵌套文件的Makefile规则,makefile,gnu-make,Makefile,Gnu Make,因此,我试图编写一个Makefile来删除嵌套在同名目录中的文件。例如,我有一个包含两个文件的目录,它们的路径是/1234/1234.txt和/567/567.txt。我想把这些文件移到最上面的目录中,这样它们就是/1234.txt和/567.txt。我尝试过类似的方法,但没有成功: variable = ./1234/1234.txt ./567/567.txt run: $(variable) $(variable): $$(notdir %): % mv $< $@ 变

因此,我试图编写一个
Makefile
来删除嵌套在同名目录中的文件。例如,我有一个包含两个文件的目录,它们的路径是
/1234/1234.txt
/567/567.txt
。我想把这些文件移到最上面的目录中,这样它们就是
/1234.txt
/567.txt
。我尝试过类似的方法,但没有成功:

variable = ./1234/1234.txt ./567/567.txt

run: $(variable)

$(variable): $$(notdir %): %
    mv $< $@
变量=./1234/1234.txt./567/567.txt
运行:$(变量)
$(变量):$$(notdir%):%
mv$<$@
这似乎是一个常见的问题,但我一直未能找到答案


非常感谢你的帮助!:)

您的目标是错误的,除非您使用二次扩展,否则尝试在规则中使用函数是行不通的。您还需要有条件地添加依赖项,因为如果您已经移动了文件,那么您的规则将给出一个错误

variable = ./1234.txt ./567.txt

run: $(variable)

.SECONDEXPANSION:
$(variable): ./%.txt: $$(wildcard ./$$*/$$*.txt)
    mv $< $@
变量=./1234.txt./567.txt
运行:$(变量)
.第二次扩展:
$(变量):./%.txt:$$(通配符./$$*/$$*.txt)
mv$<$@