config.h
ライブラリとそのライブラリ上に構築されたソフトウェアの両方にautotools(ファイルを含む)を使用すると、コンパイラは一部のマクロ(PACKAGE_NAME、PACKAGE_TARNAMEなど)の再定義について文句を言います。
どうすればこれを防ぐことができますか?
このconfig.h
ファイルは、その設定をそれを使用するソフトウェアに伝達するためにライブラリに必要です。
library_config.h
現在、オリジナルを含み、config.h
ユーザーがautotoolsを使用していないときにデフォルトを提供するラッパースクリプトがありますが、そのパッケージ内のマクロの定義を解除しても、gccから再定義の警告が表示されます。
#ifndef LIB_CONFIG_H
#define LIB_CONFIG_H
#ifdef HAVE_CONFIG_H
# include "config.h"
# undef PACKAGE
# undef PACKAGE_BUGREPORT
# undef PACKAGE_NAME
# undef PACKAGE_STRING
# undef PACKAGE_TARNAME
# undef PACKAGE_VERSION
# undef VERSION
#else
# if defined (WIN32)
# define HAVE_UNORDERED_MAP 1
# define TR1_MIXED_NAMESPACE 1
# elif defined (__GXX_EXPERIMENTAL_CXX0X__)
# define HAVE_UNORDERED_MAP 1
# else
# define HAVE_TR1_UNORDERED_MAP 1
# endif
#endif
#endif
最善のオプションは、そのマクロのないライブラリを用意することだと思います。autotoolsを使用するときに、ライブラリでPACKAGE、PACKAGE_NAMEなどの定義を回避するにはどうすればよいですか。
編集:よりよく説明しようとします。
ライブラリのでAC_CONFIG_HEADER
マクロを使用するとき、私は多くの有用な定義を含むファイルを作成します。この定義は、ライブラリ自体(コンパイルされた部分とそのヘッダーファイルの両方)およびクライアントソフトウェアに役立ちます。ただし、必要な便利なマクロと、autotoolsがクライアントソフトウェア構成にも使用されるときに衝突する固定名(PACKAGE、PACKAGE_NAME)を持つ他の汎用定義が混在しているのは残念です。configure.ac
config.h
AC_CONFIG_HEADER