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 флаг. Поведение этого задокументировано здесь.

Другие вопросы по тегам