Заставьте gcc / g использовать абсолютный путь для предупреждений при компиляции файлов в pwd

#gcc #g

#gcc #g

Вопрос:

Есть ли способ заставить gcc использовать абсолютный путь при выводе ошибок, обнаруженных в файлах, скомпилированных в текущем каталоге?

Например, следующее делает то, что я хочу, при выводе ошибок:

 g   -I. -I../../.. /home/some/path/somefile.cpp
  

но я хочу добиться того же с помощью чего-то вроде:

 g   -I. -I../../.. somefile.cpp
  

Я хочу, чтобы предупреждения и ошибки форматировались примерно так:

 /home/some/path/somefile.cpp:299:52: warning: some warning
  

Ответ №1:

Нет способа сделать это с помощью самого gcc, но это тривиально с помощью скрипта-оболочки, установленного как «gcc», «g » и т.д. В каталоге перед /usr/bin в вашем PATH:

 #! /bin/sh
sourcefile="$1"; shift
case "$sourcefile" in
    /*) ;;
    *) sourcefile="$PWD/$sourcefile" ;;
esac
exec "/usr/bin/${0##*/}" "$sourcefile" "$@"
  

… при условии, что вы всегда ставите исходный файл первым при вызове компилятора (вам придется настроить ваши Makefile-файлы).

Комментарии:

1. Это привело бы к ужасной поломке, если бы $ 1 был абсолютным путем или если $ 1 равен «-I.» (как в вопросе).

2. Я сказал, что вы всегда должны ставить исходный файл первым. Хороший момент в том, что 1 доллар — это абсолютный путь, но я это исправлю.