除了前置字符串之外,Makefile使用相同的命令行输入调用自身

时间:2016-05-09 20:55:41

标签: makefile

我有一个复杂的遗留Makefile,我需要在Docker容器中运行。基本上,我需要Makefile再次调用自己,除了我需要预先添加" docker run ..."。

最终用户可以创建多个目标,也可以指定多个命令行变量和选项,因此我需要复制整个命令行调用来制作 - 而不仅仅是调用每个目标。

我期待某种形式:

<BLACK_MAGIC>:
    docker run my_image make <COMPLETE_ORIGINAL_MAKE_COMMAND_LINE>

建议?

谢谢!

1 个答案:

答案 0 :(得分:2)

将makefile重命名为其他内容,并将以下内容用作存根

FLAGS := $(if $(MAKEFLAGS),-$(MAKEFLAGS))
.SUFFIXES:
.PHONY: all
%:: all ;
all:
    docker run my_image $(MAKE) -f Makefile.old $(FLAGS) $(MAKEOVERRIDES) $(MAKECMDGOALS)
  • 从食谱中删除MAKEFLAGS中的某些标记,以便将它们复制到主体中
  • .SUFFIXES:清除后缀列表,以防make尝试应用其中一个隐式规则
  • all设为.PHONY目标,以防文件夹中包含名为all的文件
  • 让其他目标依赖于all%::,以避免多次调用make
  • 由于在调用配方之前,命令行变量不会放在MAKEFLAGS中,因此需要与MAKEOVERRIDES分开添加,我们无法直接使用MAKEFLAGS第一点。