Introduction
色々説明を省くが,MakeではIDEで言うところのプロジェクトのルートディレクトリを設定するにはコツが要る.
ここでは,その方法についてのメモを書いておく.
How to do it
-
- まず,プロジェクトのルートディレクトリにroot.mkというファイルを置く.
-
- このroot.mk内で, 次の様なROOT変数への代入文が,いかなるinclude指示子よりも先に実行される様に 書いておく:
ROOT := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
-
- そして,各makefileでは,include指示子によってroot.mkを読むようにする.
こうすると,ROOTにはroot.mkが置かれているディレクトリ,すなわちプロジェクトのルートディレクトが代入される.
各関数の意味や代入文の意味については略します.
References
- [6.14 Other Special Variables, Special Variables - GNU
make'](https://www.gnu.org/software/make/manual/html_node/Special-Variables.html#index-MAKEFILE_005fLIST-_0040r_007b_0028list-of-parsed-makefiles_0029_007d-550 "Special Variables - GNU
make'") - [3.3 Including Other Makefiles, Include - GNU
make'](https://www.gnu.org/software/make/manual/html_node/Include.html "Include - GNU
make'")
Appendix
realpath関数はなぜ必要なのか?と,不思議に思うかもしれません.
ボヤけた言い方になりますが,私はrealpath関数を外して使っていた時にいくつかトラブルに遭ったことがあります.
しかし,そのシチュエーションを忘れてしまいました…
後でまた調べますが,どうやらMakeは相対パス指定やシンボリックリンクを使用するのが不得意のようです.