Есть ли способ сделать для генерации выходного файла из компонентов, скомпилированных в разных ветвях? - PullRequest
0 голосов
/ 11 января 2019

Мы собираем релизные образы из двух исходных двоичных файлов: binary1.bin и binary2.bin. Я бы хотел, чтобы make автоматически компилировал «binary1.bin» из исходников на branch1 и компилировал «binary2.bin» из исходников на branch2

Я разрабатываю проект для встроенной платформы. В настоящее время мы используем компилятор C / C ++ от ARM и GNU make для нашей системы сборки. У нас есть один репо для всего кода.

Во время обычной сборки Binary1.bin и Binary2.bin создаются из отдельных файлов (с некоторыми общими файлами) в одной ветви (скажем, branch1), а затем объединяются в Release_image.img, готовые для загрузки на устройство.

Проблема в том, что иногда мы хотим объединить «Binary1.bin», сгенерированный из branch1, тогда как «Binary2.bin» будет сгенерирован из branch2. Это происходит, например, если мы хотим временно заморозить «Binary2.bin» во время расследования ошибок или проверки новых изменений.

Есть ли способ заставить make обрабатывать это автоматически? Прямо сейчас нам нужно переключить ветки и вручную собрать Release_image.img из двоичных файлов компонентов, что является как медленным, так и подверженным ошибкам.

Мы открыты для реструктуризации хранилища, если это необходимо, или для альтернативных инструментов сборки.

1 Ответ

0 голосов
/ 13 января 2019

Поскольку у вас есть два разных дерева исходных текстов (branch1 и branch2), вы не сможете решить эту проблему, используя один каталог сборки (ну, по крайней мере, без взлома и перезаписи). То есть эта проблема не имеет ничего общего с make.

Я бы предложил использовать две проверки, 2-ую на Branch2, которая обновляется только тогда, когда вы «замораживаете» Branch2 для устранения ошибок и проверки. Тогда ваш make-файл будет выглядеть примерно так:

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
...