私は通常、makefileを生成するために一般的な手順を使用します。まず、「build.sh init」を使用して構成ファイルを生成し、次に「configure」を使用してmakefileとmakefile.amファイルを生成します。今、私はいくつかのインクルードファイルから "../../"を推定したいと思います(例:include "../../dirA/dirB/Ch")。ただinclude "dirA/dirB/Ch"で書くだけです。 configure.acまたはmakefile.amを変更する必要があります。誰でもこの問題を解決するのに役立ちますか?
答え1
最初に注意すべき点は、構成システムに2つのtop_dirがあることです。ソースコードがある最上位ディレクトリと、コードが生成される最上位ディレクトリです。通常、これら2つのディレクトリは同じです。ただし、場合によってはソースコードが読み取り専用ファイルシステムにあるため、他の場所にソフトウェアをビルドする必要があります。以下では、トップレベルのビルドディレクトリを使用します。このディレクトリは、最上位のソースディレクトリと同じにすることができます。
autoconf はすでに最上位のビルドディレクトリに複数の変数を定義しています。そのうちの1つは「abs_top_builddir」です。
名前が「abs_top_builddir」であるファイルを使用するとしますx.h
。x.h.in
この変数は「@」で囲まれ、ファイル内で参照されます。したがって、次のことがあります。
#include "@abs_top_builddir@/A/dirB/C.h"
あなたがしなければならないもう一つのことは教えてくれることです。構成x.h
ヘッダファイルを生成するスクリプトですx.h.in
。追加するとこれを行うことができます。
AC_CONFIG_FILES([x.h])
AC_OUTPUT
最後まで構成ファイル。 1つだけが必要なので、AC_OUTPUT
行がすでに存在する場合は再度追加する必要はありません。今すぐ実行しautoconf
て構成スクリプトを生成します。実行すると、次の内容configure
が表示されます。
configure: creating x.h
x.h
インクルード行が予想と一致していることを確認してください。
上記のすべてを書いた後は、これが一般的に行われる作業ではないことも指摘したいと思います。代わりに、inCFLAGS
または同様の名前の変数にディレクトリを含めるだけです。たとえば、Makefile.amには次のものがあります。
AM_CPPFLAGS = -I$(top_srcdir)
ここでは次に切り替えます。ソースディレクトリ以前のようにヘッダーを作成する必要がないからです。おそらく追加の行を追加する必要はありません。構成ファイルその行はおそらくすでにそこにあるだろうからです。