3

autotools ビルド システムを使用する C++ プログラムを共有ライブラリを使用するように変換し、libtool の使用を導入しています。プログラム機能のほとんどは、メイン プログラムによってロードされる共有ライブラリに配置されているため、将来、他のプログラムから共通コードにアクセスできます。

プログラムとライブラリのソース全体で、生成された自動ヘッダーconfig.hは通常のマクロで使用されます。

#if HAVE_CONFIG_H
# include <config.h>
#endif

configure.ac では、マクロを使用して生成します。

AC_CONFIG_HEADERS([config.h])

私の質問は、config.h他の人が私のライブラリを使用できるようにするためにインストールする必要がありますか?もしそうなら、それを行う適切な方法は何ですか?競合などを避けるために名前を変更する必要がありますか?

これについて私が見つけたほとんどの情報はここにあります:

http://www.openismus.com/documents/linux/building_libraries/building_libraries#installingheaders

しかし、これはほとんど公式の情報源ではありません。

4

2 に答える 2

10

自動ヘッダーconfig.h.

あなたのライブラリのユーザーが最後に必要とすることは、config.h. あなたのライブラリHAVE_FOOBARには.HAVE_FOOBAR

アーカイブのAX_PREFIX_CONFIG マクロは回避策であり、すべてにプレフィックスが付けられます。

より良い方法は、次のような行を含むテンプレート ファイル (例: blargconfig.h.in)を作成することです。

typedef @BLARG_TYPE@ blarg_int_t;

@BLARG_RANDOM_INCLUDE@

そして、AC_SUBST()これらの変数は次のconfigure.acとおりです。

AC_SUBST(BLARG_TYPE, ["unsigned short"])
AC_SUBST(BLARG_RANDOM_INCLUDE, ["#include <somerandomheader.h>"])

次に、出力ファイルとしてリストします。

AC_CONFIG_FILES([Makefile
                 src/Makefile
                 ...
                 include/blargconfig.h])

.hファイルは ; でリストされている必要がありますnodist_include_HEADERS。ファイルは にリストされているため、.h.in自動的に配布されAC_CONFIG_FILESます。

このようなファイルの宛先は、一般的に$libdir/packagename/include. たとえば、GLib を参照してください。ただし、テンプレートなしで生成されます ( autobook が示唆するように、glibconfig.h作成コード全体をインラインで記述することによって)。このアプローチは を使用するよりも保守性が低いと思いますが、より柔軟です。configure.acAC_SUBST

もちろん、コンパイラがプラットフォーム依存のヘッダーを見つけやすくするために、GLib のように pkgconfig スクリプトを作成することも必要になるでしょう。

于 2013-10-30T22:09:23.767 に答える