Jam*_*mie 6 git build gnu-make
我把tarball的软件版本放在一起,其中包括几个不同项目的输出.这些tarball本身被认为是一个版本.发布的tarball包括BOM(物料清单),其中列出了其中的所有项目及其关联的SHA1(git)签名.
为了更容易地重新创建这些tarball,我将一个make系统放在一起,逐行解析BOM,将存储库克隆到一个子目录中,检查指定的版本,然后执行构建.在我的BOM中说一行:
prog-a b5286f27d65ef20eb4508f76de5a1c57d8b21d85 git+ssh://git-user@localhost/~/prog-a
Run Code Online (Sandbox Code Playgroud)
存储库,如果尚未克隆,将被放入repos/prog-a,然后结帐完成(cd repos/prog-a; git checkout b5286f27d6),最后是make(make -C repos/prog-a).
我还没弄明白如何让gnu决定代码的签出版本是否已经构建了我需要的二进制文件.目前,每个子项目都被迫结账和重建.
如何向GNU make提供git repo的SHA1,以便它可以决定项目是否过时并需要更新(通过执行a git checkout)?
[编辑] 这是我的模式文件:
REPO_DIR=materials
BOM=$(shell sed -r 's/([^ ]+).+/\1/' bom)
BOM_DIR=$(shell sed -r 's_([^ ]+).+_$(REPO_DIR)/\1_' bom)
BOM_BLD=$(shell sed -r 's_([^ ]+).+_$(REPO_DIR)/\1/\1_' bom)
.PHONY: clean dist-clean
all: $(BOM)
clean:
@rm $(BOM) $(BOM_BLD) -rf
dist-clean: clean
@rm $(REPO_DIR)
.SECONDEXPANSION:
$(BOM): % : $(REPO_DIR)/$$*/$$*
@echo " CP $< $@"
@cp $< $@
$(BOM_BLD): % : $$(*D)
@echo " GIT CHECKOUT"
@cd $<; git checkout -q $(shell sed -rn '/$(shell echo $@ | sed -r 's_.+/__')/ s/.+ (.+) .+ .+ .+/\1/p' bom)
@echo " MAKE $@"
@make -w -C $< $(@F)
$(BOM_DIR): | materials
@echo " GIT CLONE $@"
@cd $(REPO_DIR); git clone $(shell sed -rn '/$(shell echo $@ | sed -r 's_.+/__')/ s/.+ (.+) .+ .+/\1/p' bom)
materials:
@echo " MKDIR $@"
@mkdir $@
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
435 次 |
| 最近记录: |