拉取和构建项目的Makefile

7
我正在构建一个需要一系列项目(Linux、QEMU、u-boot等)生态系统的项目,其中大多数项目都在git代码库中。我过去使用脚本来管理它们,但发现自己实现的功能最好使用make工具完成。因此,我决定将我的脚本迁移到makefile中。
问题是,如果这些项目不存在,我希望能够克隆它们,如果已存在,则希望拉取更新。有没有一种方法可以不重复地完成这项任务?

你在makefile中使用哪些基本命令来管理Git repos的工作?你能给我们展示一些例子吗? - user456814
如果 $DIR 不存在,我只想运行 git clone $GIT_URL $DIR,如果存在,则运行 cd $DIR; git pull。显然,每个项目都有不同的 $GIT_URL$DIR 对... 我不知道我是否回答了你的问题... - fakedrake
什么操作系统,以及使用哪个版本的Make? - Beta
2个回答

4

我认为类似这样的东西可以起作用。它不需要做任何工作,因为如果不依赖项目目录中的某些内容,我不确定你只能有条件地运行克隆。

force: ;

proj%: force
    @echo [ -d $@ ] || git clone srv:$@
    @cd $@ && git pull

如果你想要列出类似于proj1/.git/config这样的入口先决条件,你可以将克隆分为那些具有项目目录的仅顺序先决条件。虽然你仍需要在config的先决条件上使用force来强制拉取发生。
可能会像这样:
proj%:
    git clone srv:$@

proj%/.git/config: force | proj%
    git pull

4
你能解释一下吗?什么是力,什么是proj%,以及它如何实现以下目的:如果$DIR不存在,则git clone $GIT_URL $DIR并cd $DIR; 如果存在,则执行git pull。 - Rajat Chaudhary

2

我一直在编写一个Makefile,用于使用PHONY目标构建Docker镜像,并想到了以下模式:

.PHONY all
all: foo-docker

foo:
        git clone https://example.org/foo-project.git $@

.PHONY: foo-update
foo-update: foo
        @cd foo && git pull

.PHONY: foo-docker
foo-docker: foo-update
        @cd foo && docker build

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接