是否有任何方法可以使make从不同分支上编译的组件生成输出文件?

时间:2019-01-11 19:16:06

标签: makefile gnu-make

我们从两个源二进制文件汇编发布映像: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,这既缓慢又容易出错。

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

1 个答案:

答案 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