我们从两个源二进制文件汇编发布映像:binary1.bin和binary2.bin。我想让make从branch1上的源代码自动编译“ binary1.bin”,并从branch2上的源代码自动编译“ binary2.bin”
我正在为嵌入式平台开发一个项目。我们目前正在将ARM的C / C ++编译器和GNU make用于我们的构建系统。我们为所有代码提供一个仓库。
在正常构建期间,Binary1.bin和Binary2.bin是从同一分支(例如branch1)中的单独文件(具有某些公共文件)构建的,然后合并到Release_image.img中,准备加载到设备上。
问题在于,有时我们想合并从branch1生成的“ Binary1.bin”,而将“ Binary2.bin”从branch2生成。例如,如果我们想在调查错误或验证新更改时及时冻结“ Binary2.bin”,则会发生这种情况。
有没有办法让make自动处理此问题?现在,我们必须切换分支并手动从组件二进制文件中自行组装Release_image.img,这既缓慢又容易出错。
我们愿意在需要时重组存储库,或使用其他构建工具。
答案 0 :(得分:0)
由于您有两个不同的源代码树(branch1和branch2),因此您将无法使用一个构建目录来解决此问题(嗯,至少要避免乱搞和覆盖内容)。即这个问题与make无关。
我建议使用两次签出,branch2上的第二次签出仅在您“冻结” branch2进行错误和验证工作时才会更新。然后,您的makefile将类似于以下内容
--net-alias
现在您可以在主要结帐处使用
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