7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

configure.acで利用できるオプションまとめ

Last updated at Posted at 2018-05-21

色々configure.acをいじったので、こちらのオプションについてまとめてみました。
中々癖のあるconfigureなので、既存OSSを見ていると非常に参考になります。

今回は個人的に見慣れているlighttpdを参考にしました。
他にも何か面白いものがあったら追記してきます。

##通常Make系

通常のMakefileで使用するようなビルドオプション関連

###gccオプション

通常のMakefileと同様のgcc compile option時に利用されるオプションです。

一般的なライブラリの追加

configure.ac
AC_CHECK_LIB([rt], [main])

既存のビルドオプション更新 (LIBSやCFLAGS, CPPFLAGS等が該当します)

configure.ac
CPPFLAGS="${CPPFLAGS} -D_REENTRANT"

こんな追加方法もあるようです。(未確認)

configure.ac
AS_VAR_APPEND([CFLAGS], [" -Werror"])

新しいビルドオプションの追加

configure.ac
GCOV_OPT="-fprofile-arcs -ftest-coverage"
AC_SUBST([GCOV_OPT])
#=>各Makefile.am内で、GCOV_OPTが定義された変数として使用できます。

##define

configure.ac
AC_DEFINE([HAVE_SENDFILE_BROKEN], [1], [broken sendfile])

ちなみにここで定義されるdefineは、config.hの中に含まれる模様。

###defineでprefix等の文字列を利用したい

configure.ac内にconfigureの処理を書くと、そのまま反映されます。
その際、一度AC_DEFINEでdummyの定義する必要があります。

configure.ac
#add CommandServicePath
AC_DEFINE([CGI_COMMAND_SERVICE_PATH], ["dummy"], ["Define CGI CommandService path"])
case ${prefix} in
  NONE) $as_echo "#define CGI_COMMAND_SERVICE_PATH \"${ac_default_prefix}/sbin\"" >>confdefs.h;;
  *) $as_echo "#define CGI_COMMAND_SERVICE_PATH \"${prefix}/sbin\"" >>confdefs.h;;
esac

##configure独自機能系

configureやMakefile.amといったconfigure機能の中で使える設定関連

##Makefile.am設定

Makefile.am向けdefine

Makefile.am自体の切り替えに使える面白いやつ。

configure.ac
#AM_CONDITIONAL([渡すMakefile.am利用define], [条件分])

AM_CONDITIONAL([USE_BUILDER], [test "$enable_builder" = yes])

例えば上記を色々書いておいて、Makefile.amをこのようにくくってあげると、フォルダ内のモジュールごとビルドをスキップ出来ます。

Makefile.am
SUBDIRS=design_pattern_util

if USE_BUILDER
SUBDIRS+= builder
endif

##configureオプション追加

有効無効切り替え: enable

  • --enable-XXX => enableval=yes
  • --disable-XXX => enableval=no
    とyes/noのケースが変わります。
configure.ac
#AC_ARG_ENABLEの引数は4つ。option, help, スクリプト, 初期値
#AC_HELP_STRINGはヘルプを綺麗に出力するためのコマンドです。
AC_ARG_ENABLE(threadsafe,
  [AC_HELP_STRING([--enable-threadsafe],[説明分を追加])],,
[\
#enablevalはyes or no. --disable-threadsafeでno側のケースになる。
case "${enableval}" in
 yes) enable_threadsafe=yes ;;
 no)  enable_threadsafe=no;;
esac],
enable_threadsafe=no)

#例えば上記の結果でdefine値を切り替え、コンパイルスイッチにすることが出来ます。
if test x"${enable_threadsafe}" = x"yes"; then
  AC_DEFINE(THREAD_SAFE, 1, [Define to 1 if you want to ensure thread safe])
else
echo "libnotify is disabled"
fi

有効無効切り替え: with

  • --with-XXX => withval=yes
  • --without-XXX => withval=no
    とyes/noのケースが変わります。
    enableとの違い?ないけど--with-http2とか--with-h265とか、withの方がなんかわかりやすい/かっこいいです。
configure.ac
AC_ARG_WITH([builder],
  [AC_HELP_STRING([--without-builder],
    [exclude builder pattern library]
  )],
  [with_builder=$withval],
  [with_builder=yes]
)
#AM_CONDITIONALと組み合わせて丸ごと無効化みたいな使い方も便利です。
AM_CONDITIONAL([USE_BUILDER], [test "$with_builder" = yes])

##configureログ系

configure.ac

#エラーにならないログが出せます。
AC_MSG_NOTICE([----------------------------------------])
#こっちはエラーログ。configureもエラーになります。
AC_MSG_ERROR([bad value ${enableval} for --enable-ipv6])

##参考

lighttpd
最新コードのconfigure.acの内容

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?