■gccの基本
gcc $(CFLAGS) $(LDFLAGS) -o $(PROGRAM) $(OBJS) $(LDLIBS)
-l オプションはリンカオプションなので、コンパイルするファイル名の「後に」置く必要があります。
ようするに$(OBJS)の後。
■Makefileの変数
CPPFLAGS→C/C++ プリプロセッサフラグ -Iオプション -Dオプションはここで指定すべき。例:-I/usr/local/GameLib/include
LDFLAGS →ld用フラグ。ldのオプション。man ldでわかるように色々指定できるが、-Lでライブラリディレクトリを指定するのが王道くさい。
例:-L/usr/local/Gamelib/lib
LDLIBS→リンクするライブラリのリストを指定する。 例:-lpthread
CFLAGS→ Cコンパイルフラグ。CPPFLAGSの使用を推奨。
CXXFLAGS→C++コンパイルフラグ。CPPFLAGSの使用を推奨。
■Makefile.amの変数
Autoconfから継承される変数もあります。これらはCC,CFLAGS, CPPFLAGS,DEFS,LDFLAGS,そしてLIBSです.
AM_CPPFLAGS・・・automake用 CPPFLAGS。CFLAGSはユーザー変数で書き換えられる可能性があるので、それを.amファイル内で使用するのを避けるために存在する。よーするにconfigure時で指定されたCFLAGSで.amのCFLAGSが上書きされるのを予防。
例:-I/usr/local/GameLib/include
実行(ライブラリ)名_LDFLAGS→ ldへのオプション。ディレクトリパスを指定するのが王道。例:-L/usr/local/GameLib/lib
実行(ライブラリ)名_LDADD→ リンカ(ld)オブジェクト追加。ライブラリの指定が王道。例:-lcppunit
(プログラムと共有ライブラリでのみ使用されるらしい。最近のautomakeは_LIBADDが使えないくさいので共通化された?)
—-以下、非推奨—-
AM_CFLAGS ・・・automake用 CFLAGS。存在理由はAM_CPPFLAGSと同じ。AM_CPPFLAGSの使用を推奨。
AM_CXXFLAGS・・・automake用 CXXFLAGS。存在理由はAM_CPPFLAGSと同じ。AM_CPPFLAGSの使用を推奨。
INCLUDES・・・AM_CPPFLAGSと同じ。AM_CPPFLAGSの使用を推奨。
実行(ライブラリ)名_LIBADD→_LDADDと同様だが、プログラムではなく、静的ライブラリに使われるらしい。最近のautomakeではエラーになるような。
■おまけ
./configure --help configureオプションの表示。コマンドラインオプションの説明が参考になる。
■サンプルMakefile.am
# テスト(make check)時の実行ファイルを指定 TESTS = print_test # make check時にビルドするプログラムの指定 # ここで指定したプログラムはmake install時にインストールされない # print_test_SOURCESにヘッダを書いておくとmake dist時に挙動が違うらしい。 check_PROGRAMS = print_test print_test_SOURCES = Main.cpp PrintTest.cpp # cppunit関連のもろもろ AM_CPPFLAGS = -I/usr/local/cppunit/include -I$(top_srcdir)/Print # ライブラリディレクトリ指定 print_test_LDFLAGS = -L/usr/local/cppunit/lib # ライブラリ指定 # -ldlの指定が必要なのはcppunitがちと特殊かも? # 自作のlibtoolライブラリでは-ldlはいらなかった。 print_test_LDADD = -lcppunit -ldl
コメントを残す