文書の表示以前のリビジョンバックリンク全て展開する/折り畳む文書の先頭へ この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。 ====== 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してくれれば済む話。 で、ようやくそれを実現する方法を見つけた。[[https://emacs.stackexchange.com/questions/7475/recursively-go-up-to-find-makefile-and-compile|Recursively go up to find Makefile and compile]]に載ってるelispを使う。万が一消えた時用に転載。 <code lisp> (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) </code> 上記サイトの回答に書いてあることだが、指定ファイルが見つかるまでディレクトリを遡って検索する打って付けの''locate-dominating-file''なる関数があるそうで。今回の用途だけではなく、様々な場面で役に立ちそう。 blog/2018/2018-10-11.txt 最終更新: 2018-10-11 17:35by Decomo