我有一个golang monolith repo,里面有多个应用程序。我在每个应用程序根目录中都有Makefile,我必须在root/app1/
之类的app目录中运行make build
。我想在每个服务中摆脱这些相同的Makefile,并拥有一个顶级的Makefile,我可以使用它来一次构建所有应用程序,每个应用程序创建单独的可执行文件或仅构建特定的应用程序。像
make build app1 # builds only app1
make build # builds all apps
实现这一目标的明显方法是为所有应用程序设置目标并拥有构建命令,但想知道是否有更简单的方法来做到这一点,甚至不在Makefile中为每个目标重复构建命令
答案 0 :(得分:1)
最简单的方法是将Makefile移至root/
并在其顶部添加以下行:
APPS := app1 app2 ...
TARGETS := $(addsuffix /build, $(APPS))
all: $(TARGETS)
%/build:
$(MAKE) -C $* -f ../Makefile build
如果您不想以递归方式使用Make,那么我们必须查看makefile的内部,以便了解如何修改它。