コンパイルを手でやるのは面倒です。
製品ではすでにautomakeなどが用意されていることが多いので気にしないでいいと思います
自分でお試しプログラムを作るときに、直にコンパイルするよりもmakeと打つ方が楽です。
この記事では、Makefileについて少しだけ知識を身に付けましょう。
Makefileについて
プログラムコードをバイナリコードにするのをコンパイルといいます。
C言語ではgcc、C++ではg++などを使います。直接gcc, g++を打つのは面倒だと、Makefileが生まれました。
自分でお試しプログラムを使うとき、Makefileをほんの少しだけ学んでmakeを使いませんか?
その前にHelloWorldをやりたい方はこちらをどうぞ。
>>> HelloWorldへの道 C++編 Windows上のプログラミング環境構築
Makefileの雛形
下記が、私がよく使っているMakefileの雛形です。
いくつか前提がありますが、それを説明します。
CMDS = fortest iftest .PHONY : all all : $(CMDS) RM = /bin/rm -rf CC = /usr/bin/g++ INCDIR = CXXFLAGS = -std=c++17 -W -Wall -g3 LIB = % : %.cpp $(CC) $(INCDIR) $(CXXFLAGS) $< -o $@ $(LIB) .PHONY : clean clean : $(RM) $(CMDS)
※エディタによっては、タブのコピペがうまくいきません。Makefileでタブは意味を持ちますので、タブの2か所(%: %.cppの次の行とclean :の次の行)はタブで置き換えてください。
コンパイル対象を定める
コピペして使うときはCMDSの部分をいじってください。
fortest.cppをコンパイルしてfortestになる、iftest.cppをコンパイルしてiftestになることを前提としております。つまり、それぞれのcppファイルにmain関数を書いてください。
つまり、新たにtest1.cppを加える場合は、CMDSの行を
CMDS = test1
さらにtest2.cppを加える場合は、
CMDS = test1 test2
としてください。
使えるmakeのターゲット
このMakefileで使えるのはmake allとmake cleanの二つだけです。単にmakeと打った場合はmake allとなります。
カスタマイズ
このMakefileをカスタマイズするのであれば、INCDIR, CXXFLAGS, LIBと思います。
新たなライブラリを使おうとする場合、INCDIRでincludeするディレクトリを-Iで、LIBで共有ライブラリを-Lで指定してください。
CXXFLAGSはお好みでいろいろ変えてください。上記は以下のようになっています。
- C++17を使うこと -std=c++17
- コンパイル警告は最大限にする -W -Wall
- デバグ情報をつけてgdbが使えるようにする -g3
となっております。
まとめ
私がいつも使っているMakefileを紹介しました。
Makefileについては以下の本が超詳しいです。興味がありましたらどうぞ。
コメント