web-dev-qa-db-fra.com

Comment capturer toutes les sorties de mon compilateur dans un fichier?

Je construis un projet opensource à partir de la source (CPP) sous Linux. C'est la commande:

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

Pendant la compilation, je reçois de nombreux avertissements du compilateur. Je veux commencer à les réparer. Ma question est de savoir comment capturer toutes les sorties du compilateur dans un fichier?

$make > file ne fait pas le travail. Il suffit de sauvegarder la commande du compilateur comme g++ -someoptions /asdf/xyz.cpp Je veux la sortie de ces exécutions de commandes. 

53
pecker

Les avertissements du compilateur se produisent le stderr, pas le stdout, c'est pourquoi vous ne les voyez pas lorsque vous redirigez simplement make ailleurs Essayez plutôt ceci si vous utilisez Bash:

$ make &> results.txt

Le & signifie "rediriger stdout et stderr vers cet emplacement". D'autres coquilles ont souvent des constructions similaires.

101
John Feminella

Dans un coquillage:

make> my.log 2> & 1

C'est à dire. > redirections stdout, 2> & 1 redirige stderr au même endroit que stdout

22
Nathan Kidd

Beaucoup de bonnes réponses jusqu'à présent. Voici un petit détail:

$ make 2>&1 | tee filetokeepitin.txt 

vous permettra de regarder défiler la sortie.

20
dmckee

La sortie est allé à stderr. Utilisez 2> pour capturer cela.

$make 2> file
5
kennytm

Supposons que vous souhaitiez mettre en évidence les avertissements et les erreurs de la sortie de la construction:

make |& grep -E "warning|error"
3
Peter Nguyen

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

Le caractère> ne redirige pas le erreur standard. C'est utile quand vous vouloir enregistrer une sortie légitime sans encrassant un fichier avec des messages d'erreur . Mais que se passe-t-il si les messages d'erreur sont que voulez-vous sauver? C'est tout à fait commun pendant le dépannage. Le La solution consiste à utiliser un signe supérieur à suivi d'une esperluette. (Cette construction Fonctionne dans presque tous les modernes UNIX Shell.) Elle redirige les deux fichiers la sortie standard et la norme Erreur. Par exemple:

$ gcc invinitjig.c >& error-msg

Jetez un oeil là-bas, si cela vous aide: un autre forum

2
Gauthier

Ce n'est généralement pas ce que vous voulez faire. Vous voulez exécuter votre compilation dans un éditeur qui prend en charge la lecture de la sortie du compilateur et l’accès au caractère file/line qui pose problème. Cela fonctionne dans tous les éditeurs à considérer. Voici la configuration d'Emacs: 

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

0
Immanuel Litzroth

Essayez make 2> file. Les avertissements du compilateur apparaissent sur le flux d'erreur standard, pas sur le flux de sortie standard. Si ma suggestion ne fonctionne pas, consultez le manuel de votre shell pour savoir comment renvoyer l'erreur standard.

0
David Thornley