如何在GNU make函数中交换两个文件?

时间:2015-11-04 17:15:27

标签: 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))

1 个答案:

答案 0 :(得分:0)

如果您知道要交换的文件,可以尝试以下内容。我假设要交换的对是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))))

Foreach fooXXX文件实例化规则:

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