Я работаю над некоторым встроенным программным кодом, работающим на ARM, и поэтому мне приходится иметь дело с полным различием между режимами ARM и THUMB. Текущая система сборки использует правила статического шаблона, чтобы определить, компилировать ли файлы в режиме ARM или THUMB.
$(ACOBJS) : %.o : %.c
@echo
$(CC) -c $(CFLAGS) $(AOPT) -I . $(IINCDIR) $< -o $@
$(TCOBJS) : %.o : %.c
@echo
$(CC) -c $(CFLAGS) $(TOPT) -I . $(IINCDIR) $< -o $@
Где ACOBJS - это список объектов вывода, которые должны находиться в режиме ARM, и то же самое для TCOBJS и режима Thumb. Эти списки создаются из списка источников обычным способом
ACOBJS = $(ACSRC:.c=.o)
TCOBJS = $(TCSRC:.c=.o)
. В настоящее время это приводит к тому, что объектные файлы из сборки разбросаны по дереву исходных текстов, чего я не особо хочу. Я пытался настроить это для сборок вне дерева, но не смог заставить это работать. Мне не обязательно полностью отказываться от работы с древовидными сборками, но я хотел бы, по крайней мере, иметь возможность использовать выходной каталог, в который в конечном итоге помещаются все промежуточные файлы. Какова наилучшая стратегия для достижения этого при этих ограничениях?
Один из вариантов, который я рассматриваю, - это использование либо automake, либо всей цепочки инструментов autotools для создания make-файла. Казалось бы, это поддерживает создание нужного мне типа make-файла, но кажется излишним. Также кажется, что существует несоответствие импеданса между автоинструментами, который предназначен для переносных сборок и встроенных систем с голым железом, где такие вещи, как кортеж хоста, продиктованы целевым микро.