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

Makefile使用相同的命令行输入调用自身,但前缀字符串除外,makefile,Makefile,我有一个复杂的遗留Makefile,需要在Docker容器中运行。本质上,我需要Makefile再次调用它自己,除了我需要在“docker run…”之前加上前缀 最终用户可能会创建多个目标,也可能会指定多个命令行变量和选项,因此我需要复制整个命令行调用来创建,而不仅仅是调用每个目标 我期待着某种形式的东西: <BLACK_MAGIC>: docker run my_image make <COMPLETE_ORIGINAL_MAKE_COMMAND_LINE>

我有一个复杂的遗留Makefile,需要在Docker容器中运行。本质上,我需要Makefile再次调用它自己,除了我需要在“docker run…”之前加上前缀

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

我期待着某种形式的东西:

<BLACK_MAGIC>:
    docker run my_image make <COMPLETE_ORIGINAL_MAKE_COMMAND_LINE>
:
docker运行我的图片制作
建议


谢谢

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

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

和一些关于MAKEFLAGS(我认为这是GNU make扩展)变量的文档:@StianSkjelstad
MAKEFLAGS
是POSIX标准的一部分,较旧的make可能使用
MFLAGS