ヘッダーを含むCファイルがあります。このヘッダーは、ビルドマシンが実行しているLinuxのディストリビューションに応じて異なる場所にあります。
autotoolsを使用してさまざまな場所のヘッダーを検出する最もクリーンな方法は何ですか?
標準AC_CHECK_HEADERS
マクロを使用します。
ヘッダーの正しいプリプロセッサ定義を作成します。
例えば:
AC_CHECK_HEADERS([somepath/foo.h someotherpath/foo.h])
プリプロセッサ定義を作成するHAVE_SOMEPATH_FOO_H
かHAVE_SOMEOTHERPATH_FOO_H
、検出されたヘッダーに応じて作成します。または、両方のヘッダーが見つかった場合は両方。これらのマクロを使用して、含めるヘッダーを決定します。
そのようなことを心配するのはメンテナの責任ではありません。合理的に構築されたディストリビューションは、プリプロセッサがシステムにインストールされている場合(ユーザーの$ HOMEやその他の非標準の場所ではなく)、ヘッダーファイルがどこにあっても見つけることができるように設定されます。非標準の場所にヘッダーがインストールされている場合にヘッダーを見つけるためのツールチェーンの設定は、プラットフォーム固有のタスクであり、Linuxではを設定することで最も簡単に実行できますCPPFLAGS
。たとえば、ユーザーは
./configure CPPFLAGS=-I/p/a/t/h
(古いバージョンのautoconfで生成されたスクリプトを構成するには、呼び出しが必要な場合がありますCPPFLAGS=-I/p/a/t/h ./configure
)または、に追加/p/a/t/h
するCPATH
か、プリプロセッサにインクルードファイルを探す場所を通知するために使用可能な他のメソッドを使用します。メンテナとして行う必要があるのは、configureスクリプトがユーザーがツールチェーンを正しく設定したことを確認することだけです。これを行うには、AC_CHECK_HEADERS
in configure.ac
:の呼び出しを含めます。
AC_CHECK_HEADERS([foo.h])