GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Compilation.html ・ emacs-doc.conao3.com

29.1 Emacsでのコンパイル実行

Emacsでは、CやFortranなどの言語のコンパイラを実行し、コンパイルログをEmacsのバッファに出力できます。また、エラーメッセージを解析して、どこでエラーが発生したかを表示することも可能です。

M-x compile

Emacs上でコンパイラを非同期に実行し、エラーメッセージを*compilation*バッファに出力する。

M-x recompile
g (Compilation mode)

M-x compileの前回の呼び出し時と同じコマンドでコンパイラを起動する。

M-x kill-compilation

実行中のコンパイルサブプロセスを終了する。

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

プレフィックス引数を指定して呼び出された場合、*compilation* バッファはメジャーモードとして Comint モードを使用します(シェルモードを参照)。デフォルトでは、Comint モードには、内容に含まれる認証情報の入力プロンプトを検出し、見つかった場合に Emacs にパスワードの入力を求めるという便利な機能があります。これは、コンパイルコマンドでそのような認証情報が必要な場合に有用です。

デフォルトのコンパイルコマンドは ‘make -k’ であり、これは通常、make ユーティリティを使用してコンパイルされるプログラムに対して適切です(‘-k’ フラグは、エラー発生後も可能な限りコンパイルを継続するよう make に指示します)。GNU Make Manual の Make を参照してください。以前に 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 にバインドされています。

新しいコンパイルを開始すると、バッファが同時に処理できるコンパイルは1つだけであるため、*compilation* で既に実行中のコンパイルも終了します。ただし、M-x compile と M-x recompile は、実行中のコンパイルを実際に終了させる前に確認を求めます。確認なしに常に自動的にコンパイルを終了させるには、変数 compilation-always-kill を t に変更してください。また、コマンド M-x kill-compilation でコンパイルプロセスを終了させることもできます。

2つのコンパイルを同時に実行するには、まず1つ目のコンパイルを開始し、次に*compilation*バッファの名前を変更し(rename-uniquelyなどを使用してください。各種バッファ操作を参照)、バッファを切り替えてもう一方のコンパイルを開始します。これにより、新しい*compilation*バッファが作成されます。

コンパイルコマンドに渡される環境は、変数 compilation-environment で制御できます。その値は環境変数設定のリストであり、各要素は "envvarname=value" 形式の文字列である必要があります。これらの環境変数設定は、通常の設定を上書きします。

コンパイル出力に極端に長い行が表示されると、Emacsの動作が遅くなることがあります。compilation-max-output-line-length を超える長さの行は、その制限を超えた部分がボタンの背後に隠され、ボタンをクリックすることで非表示部分を表示できます。何も隠さないようにするには、この変数を nil に設定してください。