Makefile/Makefile.amの環境変数について

■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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です