用于拉动和构建项目的Makefile

时间:2013-08-08 00:26:35

标签: git makefile conditional

我正在构建一个项目,需要一个项目生态系统(linux,qemu,uboot等),其中大部分都在git存储库中。我曾经用脚本来管理它们,但我发现自己实现的东西最好用make完成。所以我决定将我的脚本迁移到makefile。

问题是我想要克隆的项目如果不存在则拉出(如果存在的话)。有没有办法做到这一点,而不是过多地重复自己?

2 个答案:

答案 0 :(得分:3)

我认为这样的事情会起作用。它没有make工作,因为不依赖于项目目录中的某些东西,我不确定你是否只能有条件地运行克隆。

force: ;

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

如果您希望列出类似proj1/.git/config之类的内容作为入口点先决条件,则可以将克隆拆分为仅具有订单的先决条件,以及那些具有项目目录克隆的克隆。虽然你仍然需要配置先决条件上的力来强制拉动。

或许这样的事情:

proj%:
    git clone srv:$@

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

答案 1 :(得分:0)

我一直在研究一个主要具有PHONY目标的Makefile,并提出了这种模式:

.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