EmacsのM-x compileで自動的にMakefileを探し出すようにする

Emacs上でソースコードのコンパイルを行うにはM-x compileコマンドを使う。するとmakeが走り、結果がCompilatinバッファに表示され、M-x next-errorなどでエラー行に一発ジャンプ出来て超便利ッ……という所までは良く語られる。が、しかーし、肝心のMakefileの指定方法に触れている解説が少ない。

実際のところ、M-x compileのmakeの引数指定のところで書いてやればいいのだが、カレントパスや取り掛かっているプロジェクトごとにアレコレ考えてMakefileを指定するのは現実的ではない。それする位なら、Compilationの利点を捨て、ターミナルのコマンドヒストリーでコンパイルした方がよっぽどマシである。たいてい、Makefileはソースフォルダのトップなりに置くので、編集中のファイルから上に辿り、見つかったMakefileでmakeしてくれれば済む話。

で、ようやくそれを実現する方法を見つけた。Recursively go up to find Makefile and compileに載ってるelispを使う。万が一消えた時用に転載。

(defun desperately-compile ()
  "Traveling up the path, find a Makefile and `compile'."
  (interactive)
  (when (locate-dominating-file default-directory "Makefile")
  (with-temp-buffer
    (cd (locate-dominating-file default-directory "Makefile"))
    (compile "make -k"))))
 
; C-x mでMakefileを探してコンパイル
(global-set-key (kbd "C-x m") 'desperately-compile)

上記サイトの回答に書いてあることだが、指定ファイルが見つかるまでディレクトリを遡って検索する打って付けのlocate-dominating-fileなる関数があるそうで。今回の用途だけではなく、様々な場面で役に立ちそう。

Смотреть здесь <a href=https://tripscans90.cc/>трип скан официальный</a>

1 | | 2026-07-04 18:56 | reply

нажмите <a href=https://tripscans90.cc>tripscan официальный сайт</a>

2 | | 2026-07-05 02:23 | reply

продолжить <a href=https://tripscans90.cc>трипскан вход</a>

3 | | 2026-07-05 02:46 | reply

Перейти на сайт <a href=https://vodkabet-livenews.com/>vodkabet новый сайт</a>

4 | | 2026-07-13 23:18 | reply

Finding content that strikes the perfect balance between being detailed and remaining highly readable is a rare treat, so I wanted to drop a quick thank you for sharing this well-made summary with everyone today.

<a href=https://vegastars-online.com/>15 teen porno</a>

5 |
DichaelStany
| 2026-07-15 10:14 | reply
  • blog/2018/2018-10-11.txt
  • 最終更新: 2018-10-11 17:35
  • by Decomo