Next: , Up: プログラムのコンパイルとテスト   [Contents][Index]


28.1 Emacs下でのコンパイルの実行

Emacsは、CやFortranのような言語のためのコンパイラーを実行でき、コンパイルログをEmacsのバッファーに取り込むことができます。エラーメッセージを解析して、エラーが発生した場所を示すこともできます。

M-x compile

Emacs下で非同期にコンパイラーを実行し、エラーメッセージは*compilation*バッファーに送られます。

M-x recompile
g (Compilation mode)

最後に呼び出したM-x compileと同じコマンドで、コンパイラーを呼び出します。

M-x kill-compilation

サブプロセスで実行されているコンパイルをkillします。

make、または他のコンパイルコマンドを実行するには、M-x compileとタイプします。これはミニバッファーを使用してシェルのコマンドラインを読み取り、シェルをEmacsのサブプロセス(または下位プロセス(inferior process))として、そのコマンドを実行します。出力は*compilation*という名前のバッファーに挿入されます。カレントバッファーのデフォルトディレクトリーが、コマンドを実行する作業ディレクトリーとして使用されます。したがって、通常はそのディレクトリーでコンパイルが行われます。

デフォルトのコンパイルコマンドは‘make -k’で、これはmakeユーティリティーを使ってコンパイルするプログラムにたいして通常正しいコマンドです(‘-k’フラグはmakeに、エラー後も可能な限りコンパイルを継続するよう指示します)。Make in GNU Make Manualを参照してください。前にM-x compileを実行している場合、それに指定したコマンドは自動的に変数compile-commandに格納されます。これは、次にM-x compileとタイプしたときのデフォルトとなります。ファイルのファイルローカルな値でcompile-commandを指定することもできます(ファイル内のローカル変数を参照してください)。

コンパイルを開始すると、他のウィンドウで*compilation*バッファーが表示されますが、そのウィンドウは選択されません。コンパイルが実行中は、*compilation*バッファーのメジャーモードインジケーターに‘run’という単語が表示され、単語‘Compiling’がすべてのモードラインに表示されます。コンパイル実行中、常に*compilation*バッファーを表示している必要はありません。表示されていなくてもコンパイルは継続します。何らかの理由によりコンパイルが終了したときは、*compilation*バッファーのモードラインが‘exit’(その後に終了コード。‘[0]’の場合は通常終了)、または‘signal’(何らかのシグナルがプロセスを終了させた場合)に変化します。

コンパイルの経過を見たいときは、バッファー*compilation*に切り替えて、ポイントをバッファーの最後に移動します。ポイントが最後にある場合、コンパイル出力はポイント位置に挿入されるので、ポイントは最後に留まります。そうでない場合は、バッファーの最後にコンパイル出力が追加される間も、ポイント位置は固定されたままです。

コンパイル処理中、モードラインにはその時点までのエラー、警告の数と、コンパイラーからの情報が表示されます。

変数compilation-scroll-outputを非nil値に変更した場合、*compilation*バッファーは出力に追随して自動的にスクロールします。値がfirst-errorの場合は、最初のエラーが出現した箇所でスクロールがストップし、ポイントはエラー箇所に留まります。その他の任意の非nil値の場合は、出力がなくなるまでスクロールが継続されます。

最後にコンパイルしたのと同じコマンドで再実行するには、M-x recompileとタイプします。これは最後に呼び出したM-x compileからコンパイルコマンドを再利用します。これは*compilation*バッファーも再利用し、コンパイルもそのバッファーのデフォルトディレクトリー、つまり前にコンパイルが開始されたのと同じディレクトリーで行われます。*compilation*バッファーでは、このコマンドはgにバインドされています。

新しいコンパイルの開始は、すでに*compilation*で実行中のコンパイルをkillします。これは、そのバッファーが1度に1つのコンパイルしか処理できないからです。しかし実行中のコマンドを実際にkillする前に、M-x compile、およびM-x recompileは確認を求めます。常に確認なしで自動的にコンパイルをkillするには、変数compilation-always-killtに変更します。コマンドM-x kill-compilationで、コンパイルプロセスをkillすることもできます。

1度に2つのコンパイルを実行するには、最初に1つを開始してから(多分rename-uniquelyを使用して。その他のバッファー操作を参照してください)*compilation*、バッファーをリネームして、それからバッファーを切り替えて他のコンパイルを開始します。これにより新しい*compilation*バッファーが作成されます。

コンパイルコマンドに渡される環境は、変数compilation-environmentで制御できます。この変数の値は環境変数のセッティングのリストで、各要素は文字列"envvarname=value"の形式です。これらの環境変数のセッティングは、通常の値をオーバーライドします。

コンパイル出力中で非常に長い行を表示することによって、Emacsの速度が低下する恐れがあります。compilation-max-output-line-lengthよりも長い行には、その制限を超過した部分にボタンが表示されて、そのボタンをクリックすれば隠された部分を表示することができます。この変数をnilにセットすれば、何も非表示にはされなくなります。