make有没有办法从不同分支上编译的组件生成输出文件



我们从两个源二进制文件中汇编发布图像:binary1.bin和binary2.bin。我想让它从branch1上的源文件中自动编译"binary1.bin",并从branch2 上的源代码中编译"binary 2.bin">

我正在为嵌入式平台开发一个项目。我们目前正在使用ARM的C/C++编译器和GNU make作为我们的构建系统。我们对所有代码都有一个单独的回购。

在正常构建过程中,Binary1.bin和Binary2.bin是从同一分支(比如branch1)中的单独文件(有些文件是公共的)构建的,然后组合到Release_image.img中,准备加载到设备上。

问题是,有时我们希望组合从branch1生成的"Binary1.bin",而"Binary2.bin"将从branch2生成。例如,如果我们想在调查bug或验证新更改时及时临时冻结"Binary2.bin",就会发生这种情况。

有没有办法让make自动处理这个问题?现在,我们必须切换分支,并从组件二进制文件中手动组装Release_image.img,这既缓慢又容易出错。

如果需要,我们愿意重组存储库,或者使用其他构建工具。

由于您有两个不同的源树(branch1&branch2),您将无法使用一个构建目录来解决此问题(好吧,至少在不进行黑客攻击和覆盖的情况下是这样)。也就是说,这个问题与制造无关。

我建议使用两个签出,第二个签出在branch2上,只有当您为bug和验证工作"冻结"branch2时才会更新。那么你的makefile会像下面的一样

ifndef BINARY2
BINARY2 := binary2.bin
endif
.PHONY: all
all: Release_image.img
Release_image.img: binary1.bin $(BINARY2)
....
binary1.bin: ....
....
binary2.bin: ....
....

在主结账时,您现在可以使用

# normal development build
$ make
# bug hunting/validation build using another binary2.bin
$ make BINARY2=<... path to 2nd checkout...>/binary2.bin

在第二次结账时,您将使用

# build binary2.bin @ <commit>
$ git checkout -b topic-bug-hunting <commit>
$ git clean -xfd
$ make binary2.bin

最新更新