続・Autotools
d:id:youandi:20121213:p3
昨日の続き。ケース別に。
ライブラリの場合
root/configure.ac
AC_INIT([test1],[1.0]) AC_CONFIG_SRCDIR([src/main.cpp]) AM_INIT_AUTOMAKE([foreign]) AC_PROG_CXX AM_PROG_LIBTOOL AC_CONFIG_FILES([ \ Makefile \ src/Makefile \ ]) AC_OUTPUT
root/src/Makefile.am
lib_LTLIBRARIES = libTest1.la libTest1_la_SOURCES = \ main.cpp \ $(NULL)
DSOとArchiveの両方に対応する。
INCLUDEパスの指定
root/src/Makefile.am
bin_PROGRAMS = test1 test1_SOURCES = \ main.cpp \ $(NULL) # Path Setting AM_CPPFLAGS = \ -I/usr/local/include \ $(NULL)
「.」「..」「/usr/include」辺りはデフォルトで設定される。追加分は「AM_CPPFLAGS」に追加していく。
実行ファイルにリンクするライブラリの指定
root/configure.ac
AC_INIT([test1],[1.0]) AC_CONFIG_SRCDIR([src/main.cpp]) AM_INIT_AUTOMAKE([foreign]) AC_PROG_CXX AC_CHECK_LIBM AC_SUBST([LIBM]) AC_CHECK_LIB(pthread, pthread_create) AC_CONFIG_FILES([ \ Makefile \ src/Makefile \ ]) AC_OUTPUT
root/src/Makefile.am
bin_PROGRAMS = test1 test1_SOURCES = \ main.cpp \ $(NULL) # Link Libraries test1_LDADD = \ $(LIBM) \ -lrt \ /usr/local/lib/libMyUtils.a \ $(NULL) test1_DEPENDENCIES = \ /usr/local/lib/libMyUtils.a \ $(NULL)
バージョンにもよるかも知れないが、Archive(*.a)を直接指定する場合は「xxx_DEPENDENCIES」に書いておかないと、「libMyUtils.a」が更新された時に「test1」が再リンクされない。
各ライブラリのパスの定義は「configure.ac」でマクロ定義するようにした方が良い希ガス。どのライブラリをリンクするのかを指定するのは「src/Makefile.am」で。
「config.h」を利用する
root/configure.ac
AC_INIT([test1],[1.0]) AC_CONFIG_SRCDIR([src/main.cpp]) AM_INIT_AUTOMAKE([foreign]) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_HEADER([config.h]) AC_CHECK_HEADERS([string.h math.h]) AC_PROG_CXX AC_CONFIG_FILES([ \ Makefile \ src/Makefile \ ]) AC_OUTPUT
root/src/main.cpp
#include "config.h" #include <iostream> #if HAVE_MATH_H #include <math.h> #endif #if HAVE_STRING_H #include <string.h> #endif int main() { std::cout << "Hellow World" << std::endl; return EXIT_SUCCESS; }
ビルド実行OSを識別する
root/configure.ac
AC_INIT([test1],[1.0]) AC_CONFIG_SRCDIR([src/main.cpp]) AM_INIT_AUTOMAKE([foreign 1.9.0]) # for $host $host_cpu $host_vendor $host_os AC_CANONICAL_HOST # for debug output AC_MSG_NOTICE($host_os) case "$host_os" in linux*) CFLAGS_CMN="-Wall -fno-strict-aliasing" CFLAGS="$CFLAGS_CMN $CFLAGS" CXXFLAGS="$CFLAGS_CMN $CXXFLAGS" CPPFLAGS="$CPPFLAGS" LDFLAGS="-Wl,--warn-common $LDFLAGS" ;; *) ;; esac AC_PROG_CXX AC_CONFIG_FILES([ \ Makefile \ src/Makefile \ ]) AC_OUTPUT
あとコンパイラやリンカのオプション指定をしたい場合は、以下のマクロに設定する。