我有一个复杂的遗留Makefile,我需要在Docker容器中运行。基本上,我需要Makefile再次调用自己,除了我需要预先添加" docker run ..."。
最终用户可以创建多个目标,也可以指定多个命令行变量和选项,因此我需要复制整个命令行调用来制作 - 而不仅仅是调用每个目标。
我期待某种形式:
<BLACK_MAGIC>:
docker run my_image make <COMPLETE_ORIGINAL_MAKE_COMMAND_LINE>
建议?
谢谢!
答案 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
第一点。