Я относительно новичок в make-файлах GNU и в настоящее время для своей работы мне необходимо создать цель в make-файле для проекта, чтобы скомпилировать кучу драйверов. У каждого драйвера уже есть свой собственный make-файл, созданный в их собственном каталоге сборки, и цели, которые нужно вызывать для каждого драйвера, одинаковы. ie. и для драйвера A, и для драйвера B должен вызываться «make shared».
Моя текущая идея состоит в том, чтобы определить путь к каждому драйверу в основном make-файле следующим образом:
DRIVER_A = $(CURR_DIR)/<path_to_a>/driver
DRIVER_B = $(CURR_DIR)/<path_to_b>/driver
DRIVER_C = $(CURR_DIR)/<path_to_c>/driver
From здесь, что я действительно хотел бы сделать, это вызвать один и тот же процесс для каждого из DRIVER_A, DRIVER_B и DRIVER_ C ie:
source <some_compiler>; \
cp -r <some_folder> DRIVER_A/source/; \
cd DRIVER_A/build; \
make shared <some_flags>; \
make so_test <some_flags>
И поэтому для достижения sh этого я попытался DRIVER_A, DRIVER_B и DRIVER_ C в один объект, такой как
DRIVER_SOURCES := \
DRIVER_A\
DRIVER_B \
DRIVER_C
И затем вызывая цель на DRIVER_SOURCES
drivers_sw: ${DRIVER_SOURCES}
source <some_compiler>; \
cp -r <some_folder> $@/source/; \
cd $@/build; \
make shared <some_flags>; \
make so_test <some_flags>
Но это не работает, потому что не существует правила для создания цель для DRIVER_A, DRIVER_B и DRIVER_ C, что имеет смысл для меня в ретроспективе, однако я не знаю альтернативного способа достижения sh того, что я пытаюсь выполнить sh.
Я также открыт для лучшего способа вызова make'а для каждого драйвера, чем cd'ing для его каталога и вызова make, я уверен, что есть более чистый способ, но я просто сразу собирался для функции летучая мышь.
Любая помощь будет отличной, дайте мне знать, если понадобится какая-либо дополнительная информация, я извиняюсь, если что-то пропустил, я довольно новичок в публикации по переполнению стека.
Редактировать: Я сделал опечатку в 4-м блоке кода, заменил "DRIVER_A" на $ @