Autoconf 2.54〜2.59 + Automake 1.4〜1.9あたりで動かす方法 (記述は更新しているので、古いバージョンではもう動かない 部分があるかもしれません)
bin_PROGRAMS = hello hello_SOURCES = hello.c
# mkdir src # vi src/hello.c
SUBDIRS = src
AC_CHECK_HEADER([stdio.h], [AC_DEFINE(HAVE_STDIO_H)],
[AC_MSG_ERROR([Sorry, can't do anything for you])]) #これはOK
AC_CHECK_HEADER(stdio.h, [AC_DEFINE(HAVE_STDIO_H)],
[AC_MSG_ERROR([Sorry, can't do anything for you])]) #これもOK
AC_CHECK_HEADER(stdio.h, AC_DEFINE(HAVE_STDIO_H),
AC_MSG_ERROR([Sorry, can't do anything for you])) #これは危険
AC_CHECK_HEADER(elf.h, [AC_DEFINE(SVR4) LIBS="$LIBS -lelf"]) #これはOK AC_CHECK_HEADER(elf.h, [AC_DEFINE(SVR4); LIBS="$LIBS -lelf"]) #これはダメ
以下、概ね configure.in で書かなければならない順番に どんなマクロが使えるのかを紹介。 ちなみに[, ]で括られてるものは省略できる引数。 (例の中の`[' と `]'はm4クオートなので注意)
これらの変数は config.h をインクルードすることでソースから参照可能。 あるいは、Makefile.am 中で @PACKAGE_NAME@ のようにして参照可能
AC_CHECK_LIB(socket, socket,
[AC_DEFINE(HAVE_SOCKET)],
[AC_MSG_ERROR(Test for socket failed.])
#if HAVE_STRING_H # include <string.h> #else # if HAVE_STRINGS_H # include <strings.h> # else # include "my_string.h" # endif #endif
#if !HAVE_BZERO && HAVE_MEMSET #define bzero(buf, bytes) ((void)memset(buf, 0, bytes)) #endif
AC_MSG_CHECKING(for addrinfo) AC_CACHE_VAL(ac_cv_struct_addrinfo, AC_TRY_COMPILE([ # include <sys/types.h> # include <netdb.h>], [struct addrinfo s], ac_cv_struct_addrinfo=yes, ac_cv_struct_addrinfo=no)) AC_MSG_RESULT($ac_cv_struct_addrinfo) if test $ac_cv_struct_addrinfo = yes; then AC_DEFINE(HAVE_STRUCT_ADDRINFO, [1], [Define to 1 if you have struct addrinfo]) fi上のコードがやってることは:
bin_PROGRAMS = prog #ターゲット prog_SOURCES = main.c prog.c prog.h #ソースファイル prog_LDADD = @HOGE_LIB@ #付加的なライブラリ prog_DEPENDENCIES = @HOGE_OBJ@ man_MANS = prog.1 progconf.8
lib_LIBRARIES = libhoge.a libhoge_a_SOURCES = hoge.c parse.c
bin_PROGRAMS = etags ctags etags_SOURCES = etags.c etags_CFLAGS = -DETAGS ctags_SOURCES = etags.c ctags_CFLAGS = -DCTAGS
bin_PROGRAMS = etags ctags etags_SOURCES = etags.c ctags_SOURCES = ctags_LDADD = ctags.o etags.o: etags.c $(CC) $(CFLAGS) -DETAGS ctags.o: etags.c $(CC) $(CFLAGS) -DCTAGS
変更履歴