Я могу запустить команду оболочки, чтобы получить путь включения по умолчанию из компилятора (и добавить -I):
arm-none-eabi-gcc -xc -E -Wp,-v /dev/null 2>&1 | sed -En '/#include <...> search starts here:/,/End of search list./{//!p;};' | sed 's/^ /-I/'
Я пытаюсь добавить это в Makefile:
PROJECT_INC = $(shell arm-none-eabi-gcc -xc -E -Wp,-v /dev/null 2>&1 | sed -En "/#include <...> search starts here:/,/End of search list./{//!p;}" | sed "s/^ /-I/")
Затем я получаю сообщение об ошибке:
Makefile:104: *** unterminated call to function `shell': missing `)'. Stop.
Я попытался использовать обратные кавычки, но это не помогает. Пробовал использовать одинарные или двойные кавычки для команд sed
. Большинство подобных проблем, которые я могу найти в SO, связаны с расширением, когда в команде есть $, но здесь это не должно быть проблемой.
Если я урезал команду:
PROJECT_INC = $(shell arm-none-eabi-gcc -xc -E -Wp,-v /dev/null 2>&1 )
Тогда вроде вырубает выход. Оболочка вернет
ignoring duplicate directory "/Users/mjeanson/miniconda3/envs/project/bin/../lib/gcc/../../lib/gcc/arm-none-eabi/8.3.1/include"
ignoring nonexistent directory "/Users/mjeanson/miniconda3/envs/project/bin/../arm-none-eabi/usr/local/include"
ignoring duplicate directory "/Users/mjeanson/miniconda3/envs/project/bin/../lib/gcc/../../lib/gcc/arm-none-eabi/8.3.1/include-fixed"
ignoring duplicate directory "/Users/mjeanson/miniconda3/envs/project/bin/../lib/gcc/../../lib/gcc/arm-none-eabi/8.3.1/../../../../arm-none-eabi/include"
ignoring nonexistent directory "/Users/mjeanson/miniconda3/envs/project/bin/../arm-none-eabi/usr/include"
#include "..." search starts here:
#include <...> search starts here:
/Users/mjeanson/miniconda3/envs/project/bin/../lib/gcc/arm-none-eabi/8.3.1/include
/Users/mjeanson/miniconda3/envs/project/bin/../lib/gcc/arm-none-eabi/8.3.1/include-fixed
/Users/mjeanson/miniconda3/envs/project/bin/../lib/gcc/arm-none-eabi/8.3.1/../../../../arm-none-eabi/include
End of search list.
# 1 "/dev/null"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/dev/null"
. Запустив это внутри Makefile, она отбросит первую строку, начинающуюся с #include
, но в остальном она работает. Не уверен, что это все еще будет проблемой после того, как конвейер к команде sed
будет работать нормально (?)
Если это актуально (и не очевидно в приведенных выше фрагментах кода), моя среда использует кросс-компилятор (arm-none-eabi-g cc) и в среде conda, и все это работает на Ma c.
Я не думаю, что это должно иметь значение, но причина, по которой я Это нужно сделать, чтобы я мог использовать какой-нибудь инструмент анализа stati c. При компиляции самого кода мне не нужно добавлять путь включения по умолчанию.
Бонус: я попытался объединить команды sed в одну, но не смог понять, как это сделать ...