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

Makefile make有没有办法从不同分支上编译的组件生成输出文件?,makefile,gnu-make,Makefile,Gnu Make,我们从两个源二进制文件:binary1.bin和binary2.bin组装发行版映像。我想让make自动从branch1上的源代码编译“binary1.bin”,并从branch2上的源代码编译“binary2.bin” 我正在为一个嵌入式平台开发一个项目。我们目前正在使用ARM的C/C++编译器和GNU make构建系统。我们有一个单一的回购所有代码 在正常构建过程中,Binary1.bin和Binary2.bin是从同一分支(比如branch1)中的不同文件(有些文件是相同的)构建的,然后合

我们从两个源二进制文件: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”,而从branch2生成“Binary2.bin”。例如,如果我们想在调查bug或验证新更改时及时临时冻结“Binary2.bin”,就会发生这种情况

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


如果需要,我们愿意重新构建存储库,或者选择其他构建工具。

由于您有两个不同的源代码树(branch1和branch2),您将无法使用一个构建目录来解决此问题(至少在不修改和覆盖内容的情况下是这样)。也就是说,这个问题与制造无关

我建议使用两个签出,branch2上的第二个签出只有在“冻结”branch2进行bug和验证工作时才会更新。那么您的makefile将如下所示

ifndef二进制文件2
BINARY2:=BINARY2.bin
恩迪夫
冒牌货:全部
全部:发布_image.img
Release_image.img:binary1.bin$(BINARY2)
....
binary1.bin:。。。。
....
binary2.bin:。。。。
....
在主收银台上,您现在可以使用

#正常开发构建
$make
#使用另一个binary2.bin进行错误查找/验证构建
$make BINARY2=/BINARY2.bin
在第二次结账时,您将使用

#build binary2.bin@
$git checkout-b主题bug搜索
$git clean-xfd
$make binary2.bin

我不确定我是否理解,但您是否可以为Release_image.img制定一个规则,用于签出branch1,执行$(make)Binary1.bin(可能前面有$(make)clean-Binary1),签出branch2,执行$(make)Binary2.bin,然后将生成的文件合并到Release_image.img?您的分支应该设置为使构建发布所需的所有代码都位于一个分支中。制作一个branch3,其中包含branch1和branch2中您需要的内容。分支之间不应该有太大的差异,否则它们更像是完整的代码分支。这些应该在某个时候重新合并,对吗?对不起,我应该澄清一下。通常,binary1.bin和binary2.bin都是从branch1生成的,但偶尔我们需要从branch1使用binary1.bin,从branch2使用binary2.bin。例如,如果由于错误或验证问题,我们需要在历史上的某个时间点临时“冻结”binary2.bin,就会发生这种情况。好的,如果它签出branch1,$(生成)Binary1.bin,将binary2.bin复制到临时目录,签出branch2,$(生成)binary2.bin,从临时目录复制Binary1.bin以覆盖branch2的Binary1.bin,然后将文件合并到Release_image.img中?为什么不进行两次签出?也就是说,branch1上的主要一个是您通常使用的,而branch2上的第二个是您仅在冻结branch2时更新的“历史时刻”。然后更新makefile以接受来自其他位置的预构建binary2.bin。