Как настроить autotools/gcc для печати предупреждений и ошибок с абсолютным путем?

Я компилирую проект autotools на основе C и получаю предупреждения и ошибки. Они отображаются следующим образом:

foo.c:123: warning: some message

Я хотел бы, чтобы они отображались так:

/full/path/to/foo.c:123: warning: some message

Я знаю, что это нельзя настроить с помощью gcc, кроме как путем передачи ему полного пути к файлу, поэтому я предполагаю, что это должно быть настроено с помощью autoconf/automake.

Это возможно? Если да, то как?


person ivarec    schedule 03.09.2013    source источник


Ответы (4)


Я не знаю, как это сделать, и подозреваю, что это невозможно. НО если вашей более высокой целью является найти файлы, на которые ссылаются предупреждения, может быть достаточно использовать Emacs:

Откройте файл в верхнем исходном каталоге, например C-x C-f configure.ac RET, запустите компиляцию: M-x compile RET (возможно, отредактируйте команду make) RET. Когда вы видите предупреждение в буфере компиляции, используйте C-x backtick (C-x `) для отображения исходного местоположения.

Emacs управляет этим, анализируя сообщения «Вход в каталог /foo» и «Выход из каталога /foo» от make, так что вы можете эмулировать это.

person Martin Vidner    schedule 05.09.2013
comment
Я использую Emacs, и он работает, как вы сказали. Я отмечу это как ответ, но если кто-то опубликует более общее решение, я соглашусь с ним. Спасибо - person ivarec; 10.11.2013

Вот трюк, который может сработать для вас.

Можно добавить следующую строку в Makefile.am

VPATH = $(abs_srcdir)

Это создаст Makefile, который будет искать исходный каталог, ссылаясь на каталог по абсолютному пути. В свою очередь, gcc получит абсолютные пути к исходным файлам.

Я НЕ уверен, что этот трюк будет работать для всех версий make. В некоторых версиях make значение переменной VPATH читается как обычный текст, и make не заменяет значение abs_srcdir.

person Ashutosh Gupta    schedule 05.04.2014

Я думаю, вы могли бы сделать это, но это может вызвать проблемы с другими целями autotools make (например, make dist), поэтому я бы не советовал этого делать. Существуют абсолютные аналоги переменных top_srcdir, top_builddir, srcdir и builddir с префиксом abs_ (например, abs_top_srcdir). Таким образом, вы можете попробовать префикс ваших исходных файлов перед их компиляцией с помощью gcc.

Я не уверен, почему вы думаете, что автоинструменты должны это делать. То, как выводятся предупреждения/ошибки, является функцией компилятора C (gcc), а не автоинструментов.

person ldav1s    schedule 05.09.2013

Для сборок вне дерева существует разница в именах файлов, используемых для ссылки на исходные файлы между

mkdir _build
cd _build
../source-tree/configure --prefix=...

а также

mkdir _build
cd _build
$PWD/../source-tree/configure --prefix=...
person ndim    schedule 19.08.2020