GNU make добавляет пробел после опции -I (общий каталог)
Я пытаюсь использовать компилятор armclang через make -файл GNU, но при использовании опции -I происходит конфликт между обоими инструментами.
Для компилятора armclang параметр -I означает "Добавляет указанный каталог в список мест, в которых выполняется поиск для поиска включенных файлов. Синтаксис -Idir" без пробела.
Для GNU make -файл '-I dir' имеет то же значение (но с пробелом).
в моем make -файле у меня есть следующее:
$(aarch32_bootobj): %.o: %.s
@echo " [ASM ] $<"
@armclang --target=armv8a-arm-none-eabi -Icommon/shared -c $< -o $@
При запуске Makefile я получаю следующее предупреждение и ошибку:
armclang: warning: argument unused during compilation: '-I common/shared'
aarch32/shared/bootcode.s:32:10: error: Could not find include file 'boot_defs.hs'
Где boot_defs.hs существует в общем / общем
При запуске той же команды armclang вне make -файла это работает. поэтому я предполагаю, что makefile отформатировал опцию -Icommon / share и добавил автоматический пробел сразу после -I.
Есть ли способ правильно запустить команду armclang? в других мирах возможно ли позволить make -файлу анализировать -Icommon / shared без какого-либо автоматического форматирования?
Я пытался много трюков, чтобы обойти это без какого-либо успеха.
Заранее большое спасибо.
1 ответ
GNU make не разделяет -Icommon/shared
вариант, и даже если бы это сделал armclang
сможет разобрать это. Если вы удалите @
от armclang
позвоните в Makefile, вы увидите, что именно make
делает и что -Icommon/shared
параметр остается неизменным.
Ваша проблема с armclang
; увидеть эту ошибку на трекере. Не проходит -I
флаги встроенному ассемблеру. Обходной путь должен пройти -no-integrated-as
в armclang
:
@armclang -no-integrated-as --target=armv8a-arm-none-eabi -Icommon/shared -c $< -o $@
Если это не сработает, замените .include
директива с #include
и либо переименуйте ваши файлы asm в .S
(верхний регистр S
), что указывает на необходимость предварительной обработки C или передачи armclang
-x assembler-with-cpp
флаг. Поведение этого задокументировано здесь.