Как мне захватить весь вывод моего компилятора в файл? - PullRequest
54 голосов
/ 19 февраля 2010

Я строю проект с открытым исходным кодом из исходного кода (CPP) в Linux. Это заказ:

$CFLAGS="-g Wall" CXXFLAGS="-g Wall" ../trunk/configure --prefix=/somepath/ --host=i386-pc --target=i386-pc
$make

Во время компиляции я получаю много предупреждений компилятора. Я хочу начать их чинить. У меня вопрос, как захватить все выходные данные компилятора в файл?

$make > file не выполняет работу. Это просто сохранение команды компилятора, как g++ -someoptions /asdf/xyz.cpp Я хочу вывод этих выполнений команд.

Ответы [ 8 ]

103 голосов
/ 19 февраля 2010

Предупреждения компилятора появляются на stderr, а не stdout, поэтому вы их не видите, когда просто перенаправляете make в другое место Вместо этого попробуйте это, если вы используете Bash:

$ make &> results.txt

& означает «перенаправить stdout и stderr в это местоположение». Другие оболочки часто имеют аналогичные конструкции.

25 голосов
/ 19 февраля 2010

В оболочке Bourne:

make> my.log 2> & 1

Ie> перенаправляет стандартный вывод, 2> & 1 перенаправляет стандартный вывод в то же место, что и стандартный вывод

22 голосов
/ 19 февраля 2010

Много хороших ответов до сих пор. Вот излишек:

$ make 2>&1 | tee filetokeepitin.txt 

позволит вам просмотреть прокрутку вывода мимо.

5 голосов
/ 19 февраля 2010

Выход отправился в stderr. Используйте 2>, чтобы захватить это.

$make 2> file
3 голосов
/ 19 июля 2016

Предположим, вы хотите высветить предупреждение и ошибку из выхода сборки:

make |& grep -E "warning|error"
3 голосов
/ 19 февраля 2010

С http://www.oreillynet.com/linux/cmd/cmd.csp?path=g/gcc

Символ> не перенаправляет стандартная ошибка. Это полезно, когда вы хотите сохранить законный вывод без испортить файл с сообщениями об ошибках. Но что, если сообщения об ошибках что вы хотите сохранить? Это довольно распространено во время устранения неполадок. Решение состоит в том, чтобы использовать знак больше, чем сопровождаемый амперсандом. (Это строить работы почти в каждом современном UNIX shell.) Он перенаправляет оба стандартный вывод и стандарт ошибка. Например:

$ gcc invinitjig.c >& error-msg

Посмотрите, поможет ли это: другой форум

0 голосов
/ 05 декабря 2016

Обычно это не то, что вы хотите сделать. Вы хотите запустить компиляцию в редакторе, который поддерживает чтение выходных данных компилятора и переход к файлу / строковому символу, в котором есть проблемы. Это работает во всех редакторах, заслуживающих рассмотрения. Вот настройка emacs:

https://www.gnu.org/software/emacs/manual/html_node/emacs/Compilation.html

0 голосов
/ 19 февраля 2010

Попробуйте make 2> file. Предупреждения компилятора выходят из стандартного потока ошибок, а не из стандартного потока вывода. Если мое предложение не сработает, обратитесь к руководству по вашей оболочке, чтобы узнать, как устранить стандартную ошибку.

...