Shell 如何在GNU make函数中交换两个文件?
我想在运行Makefile中的Shell 如何在GNU make函数中交换两个文件?,shell,unix,makefile,gnu,Shell,Unix,Makefile,Gnu,我想在运行Makefile中的uninstall目标时使用函数/宏交换两个文件 以下是我所拥有的,仅保留其中一个文件并删除另外两个: swap = mv $(1) $(3); mv $(2) $(1); mv $(3) $(2) uninstall: @$(call swap,`printf "%s\n" $(FILE).* | sort -r | sed -n 1p`,\ $(FILE),$(shell mktemp $(FILE).XXX)) 如果您知道要交换哪些文件
uninstall
目标时使用函数/宏交换两个文件
以下是我所拥有的,仅保留其中一个文件并删除另外两个:
swap = mv $(1) $(3); mv $(2) $(1); mv $(3) $(2)
uninstall:
@$(call swap,`printf "%s\n" $(FILE).* | sort -r | sed -n 1p`,\
$(FILE),$(shell mktemp $(FILE).XXX))
如果您知道要交换哪些文件,可以尝试以下方法。我假设要交换的对是
fooXXX,barXXX
define SWAP_files
swap_$(1):
@temp=$$(shell mktemp temp.XXXXXX); \
to_swap_with=$$(patsubst foo%,bar%,$(1)); \
mv $(1) $$$$temp; \
mv $$$$to_swap_with $(1); \
mv $$$$temp $$$$to_swap_with
uninstall: swap_$(1)
endef
$(foreach foo,$(FOOS),$(eval $(call SWAP_files,$(foo))))
ForeachfooXXX
文件它实例化了一个规则:
swap_fooXXX:
@temp=$(shell mktemp temp.XXXXXX); \
to_swap_with=$(patsubst foo%,bar%,fooXXX); \
mv fooXXX $$temp; \
mv $$to_swap_with fooXXX; \
mv $$temp $$to_swap_with
还有一条规则:
uninstall: swap_fooXXX
您没有在任何地方运行
mktemp
命令。试试@set-x$(调用…)
查看实际运行的内容。这应该对你有帮助。从我的编辑器复制粘贴时出现本地错误。我试着使用记号
和$(shell…
)。我已经更新了这个示例。上面的函数实际上可以工作,如果我只是$(调用1,2,3)
,问题就出在mktemp
的某个地方。$(shell)
是该位置的错误时间,但这与问题无关(它发生在配方扩展时,而不是该配方行的运行时)。你可以做的另一件事是停止玩这个游戏,只使用一个符号链接,你可以自动交换出去。