次: , 上: Building


21.1 Emacs下でのコンパイラの実行

EmacsはCやFortranのような非対話的な言語のコンパイラを 下位プロセスとして実行でき、 そのエラーログをEmacsバッファに取り込めます。 また、エラーメッセージを解析して、 コンパイルエラーを起こしたソース行を提示することもできます。

M-x compile
Emacs下でコンパイラを非同期に実行し、 エラーメッセージを`*compilation*'バッファに取り込む。
M-x grep
Emacs下でgrepを非同期に実行し、 一致した行を`*grep*'バッファに取り込む。
M-x grep-find
指定した引数でfindgrepを実行し、 出力を`*grep*'バッファに取り込む。
M-x kill-compilation
M-x kill-grep
実行中のコンパイラやgrepのサブプロセスを停止させる。

makeや他のコンパイルコマンドを実行するには、 M-x compileと打ちます。 このコマンドは、ミニバッファでシェルコマンドを読み取り、 そのコマンドを下位シェルで実行し、 出力結果を`*compilation*'という名のバッファに取り込みます。 カレントバッファのデフォルトディレクトリを シェルコマンド実行時の作業ディレクトリとして用います。 そのため、通常はこのディレクトリにあるものをコンパイルします。

シェルコマンド行を読み取るとき、 ミニバッファにはデフォルトのシェルコマンド行が表示されますが、 これは前回M-x compileを使ったときのコマンドです。 単に<RET>だけを打鍵すると、同じシェルコマンド行を再使用します。 最初のM-x compileでは、デフォルトは`make -k'です。 デフォルトのコンパイルコマンドは変数compile-commandから取ります。 適切なコンパイルコマンドが他にある場合には、 ファイルでこの変数のローカルな値を指定すると便利でしょう (see File Variables)。

コンパイルが始まると、バッファ`*compilation*'は別のウィンドウに 表示されますが、選択されるわけではありません。 このバッファのモード行では、 括弧の中に単語`run'か`exit'を表示して コンパイルが終了したかどうか示します。 このバッファを見えるようにしておく必要はありません。 いずれにしても、コンパイルは継続されます。 コンパイル中は、すべてのウィンドウのモード行に 文字列`Compiling'が表示されます。 この文字列が消えれば、コンパイルは終了しています。

コンパイルの進行状況を見たい場合には、 `*compilation*'バッファに切り替えてポイントをバッファの末尾に移動します。 ポイントがバッファの末尾にあると、 新らたなコンパイル出力はポイントのまえに挿入されポイントは末尾に留まります。 ポイントがバッファの末尾にないと、 コンパイル出力はバッファの末尾に追加されますが ポイントは途中の場所に留まったままです。

変数compilation-scroll-outputnil以外の値を設定すると、 出力が到着するたびに出力に追従するように コンパイルバッファをつねにスクロールします。

コンパイルプロセスを止めるには、 M-x kill-compilationを実行します。 コンパイルプロセスが終了すると、`*compilation*'バッファの モード行の表示が`run'から`signal'に変わります。 一度に実行可能なコンパイルは1つだけなので、 新しくコンパイルを始めると実行中のコンパイルは停止させられます。 しかし、M-x compileは、 実行中のコンパイルを実際に停止させるかどうか聞いてきます。