前回はmakefileの基本的なことを書きました。
が、重要なことを言い忘れていました。
まず、makefileの実行の仕方。
これは、コマンドラインで、makefileのあるディレクトトリで、makeコマンドを入力することによって実行します。
この場合、makefileの一番初めのターゲットだけ実行しますが、allターゲットがあった場合それを優先的に実行します。
任意のターゲットを実行したい場合、
make main.o
のように、makeコマンドの後にターゲット名をつけます、するとそのターゲット名だけ処理が実行されます。
さて、前回の私の失敗の処理は終わりました。
今回はmakefileのマクロ機能とサフィックスルールを紹介します。
まず、便利なマクロについて説明します。
マクロは、makefile以外でもプログラミングやいろいろなことで出てくる言葉ですが、いつもと同じような意味です。
前回のmakefileをマクロを使って書き直すと以下のようになります。
OBJS = main.o complex.o
program.exe : $(OBJS)
c++ -o $@ $(OBJS)
main.o : main.cpp complex.h
c++ -c main.cpp
complex.o : complex.cpp complex.h
c++ -c complex.cpp
このように、文字列に別名を与えることができます。
これによって、同じことを何度も書かなくていい、一度に複数の同じ文字列を変更できるなどのメリットが得られます。
マクロの宣言の仕方は、
マクロ名 = 文字列
であり、文字列をマクロとして展開するときは$(マクロ名)と書きます。
ちなみに、$@ははじめから用意されているマクロで、ターゲット名として展開されます。
次にサフィックスルールについて説明します。
サフィックスルールは同じ拡張子のものをまとめて別の拡張子に変えることができます。
たとえば、このmakefileでは、main.cppとcomplex.cppは両方ともcomplex.o main.oと、oファイルに変換されています。
これをまとめて書くことができ、このmakefileを書き直すと以下のようになります。
CC = c++
OBJS = main.o complex.o
program.exe : $(OBJS)
CC -o $@ $(OBJS)
.o.c :
CC -c $<
main.o : complex.h
complex.o : complex.h
この
.o.c というのが.cを.oに変換するという意味です。
コマンド部分の$<マクロはそのファイル名として展開されます。
このように、サフィックスルールとマクロを利用するだけでここまで短くすることが可能になります。
さらに、#を書き、その後ろに文字列を書くことによってコメントとして記述することができます。
以上がmakefileの機能です。
makefileはコマンドラインで使う場合なら非常に重宝しますが、Visual Studio や Borland Cなどの統合開発環境を使う場合はそちらのほうが便利です。
今では、訳に立つ場面は少なくなってきましたが、覚えることも少なく、覚えておいて損はないので、ぜひ使えるようにしておいてください。