Makefile使用相同的命令行输入调用自身,但前缀字符串除外
我有一个复杂的遗留Makefile,需要在Docker容器中运行。本质上,我需要Makefile再次调用它自己,除了我需要在“docker run…”之前加上前缀 最终用户可能会创建多个目标,也可能会指定多个命令行变量和选项,因此我需要复制整个命令行调用来创建,而不仅仅是调用每个目标 我期待着某种形式的东西:Makefile使用相同的命令行输入调用自身,但前缀字符串除外,makefile,Makefile,我有一个复杂的遗留Makefile,需要在Docker容器中运行。本质上,我需要Makefile再次调用它自己,除了我需要在“docker run…”之前加上前缀 最终用户可能会创建多个目标,也可能会指定多个命令行变量和选项,因此我需要复制整个命令行调用来创建,而不仅仅是调用每个目标 我期待着某种形式的东西: <BLACK_MAGIC>: docker run my_image make <COMPLETE_ORIGINAL_MAKE_COMMAND_LINE>
<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
清除后缀列表,以防make尝试应用其隐式规则之一.suffix:
- 将
aall
设为目标,以防文件夹包含名为.PHONY
all
- 使其他目标依赖于
和all
以避免多次调用Make%::
- 由于在调用配方之前,命令行变量不会放置在
中,因此需要使用MAKEFLAGS
单独添加它们,因此,由于第一点,我们不能直接使用MAKEOVERRIDES
MAKEFLAGS
MAKEFLAGS
是POSIX标准的一部分,较旧的make可能使用MFLAGS
。