Go to the first, previous, next, last section, table of contents.

`make'の実行,一般のコンパイラの実行.

EmacsはCやFortranのような対話的でない言語のコンパイラをサブプロセスと して実行し,エラー記録をバッファに取り込むことができます.またエラーメッ セージを解析してエラーが発見されたファイルを読み込み,エラーが起こった行 へポイントを移動することができます.

M-x compile
Emacsの下で非同期的にコンパイラを起動します.エラーメッセージを `*compilation*'バッファに取り込みます.
M-x grep
Emacsの下で非同期的にgrepを実行し,マッチした行を `*compilation*'バッファに取り込みます.
M-x kill-compiler
M-x kill-grep
実行中のコンパイラやgrepのサブプロセスの実行を止めます.
C-x `
次のコンパイラのエラーメッセージ,あるいはgrepでマッチした位置に 移動します.

makeまたは他のコンパイラを実行するには,M-x compileを入力 します.このコマンドはミニバッファからシェルコマンドを読みとり,読んだコ マンドを,サブプロセスのシェルで出力を`*compilation*'バッファに切替 えて実行します.カレントバッファのデフォルトディレクトリが,コマンド実行 のためのワーキングディレクトリとして使われます.このため,このディレクト リのmakefileが通常使われます.

シェルコマンドを読むときには,ミニバッファにデフォルトのコマンドが表示 されます.これは最後にM-x compileを行なった際に実行したものです. RETだけを押すと同じコマンドが再び実行されます.はじめてのM-x compileではデフォルトとしてmake -kが表示されます.デフォルトは変 数compile-commandから得ます.ファイルの適当なコンパイルコマンドが make -k以外のときは,そのファイルでcompile-commandをローカ ルに設定すると便利です(see section ファイル内のローカル変数).

コンパイルが開始されると`*compilation*'バッファが他のウィンドウに 表示されますが選択はされません.モード行のかっこ内に`run'あるいは `exit'と表示されるので,コンパイルが終了したかどうかがわかります. `*compilation*'バッファを表示しておく必要はありません.どのようになっ てもコンパイルは続けられます.

コンパイルプロセスの実行を止めるには,M-x kill-compilationを入力 します.`*compilation*'バッファのモード行は`run'から `signal'に変わります.別の新しいコンパイルを始めると,実行中のコン パイルは止められます.実行できるのは常に1つだけです.実行中のコンパイル を実際に止める前に確認を求められます.

コンパイラのエラーメッセージを解析するには,C-x ` (next-error)を入力します.C-xに続く文字はアクサングレーブで, 引用符ではありません.このコマンドは1つのウィンドウで `*compilation*'バッファを,別のウィンドウで次のエラーが起こったバッ ファを表示します.そのバッファのポイントはエラーが発見された行へ移動しま す.相当するエラーメッセージは`*compilation*'が表示されているウィン ドウの最上部へスクロールされます.

コンパイルの開始後,はじめてC-x `が使用されるときにすべてのエラー メッセージを解析し,エラーメッセージが出力されたすべてのファイルを読み込 んで,エラーメッセージのある行を示すマーカーを作ります.そして先頭のエラー メッセージの位置にポイントを移動します.続けてC-x `を使用すると, 最初のときに作ったデータを使って先に進みます.用意されたエラーメッセージ がなくなったときは,次のC-x `であとから加わったエラーメッセージを 調べます.これはコンパイルを実行中にコンパイルエラーの編集を始めるのに便 利です.新たなエラーメッセージがなければ,C-x `がエラーになります.

C-u C-x `はそれまでに作ったエラーメッセージデータを捨ててもう一 度`*compilation*'バッファを解析し,最初のエラーを表示します.このよ うにして,同じエラーを再び処理できます.

コンパイラを実行する代わりに,grepを実行してマッチした行を見る ことができます.これには,通常grepに与えるのと同じ引数をつけて M-x grepを実行します.すなわち,grepスタイルの正規表現(シェ ルの特殊文字のためシングルクォートを使う)と,ファイル名(ワイルドカードが 使用できます)です.grepの出力は`*compilation*'バッファに取り 込まれ,マッチした行はコンパイルエラーのようにC-x `で見つけられま す.

注意:シェルはコンパイルコマンドを実行するために使用されます.しか しシェルは非対話的に動作するようになっています.特にシェルはプロンプトな しで動作を始めます.普通のシェルのプロンプトが`*compilation*'バッファ に現われたら,シェルの初期化ファイル(`.cshrc'あるいは`.shrc'な ど)の書き方が間違っています.無条件にプロンプトを設定するのは間違いです. 初期化ファイルではプロンプトがあるときだけ別のプロンプトを設定するように します.cshでは次のようにします.

if ($?prompt) set prompt = ...

Go to the first, previous, next, last section, table of contents.