私は、この構造のautotoolsの管理のプロジェクト(sscceのtar.gzパッケージhere)があります。autotoolsのMakefileは自動的にインクルードされたヘッダファイルを依存関係と見なしますか?
マイconfigure.ac
は次のとおりです。Makefile.am
だった私の
AC_INIT([foo], [1.0], [[email protected]])
AM_INIT_AUTOMAKE([foreign -Wall -Werror])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
:
bin_PROGRAMS = main
main_SOURCES = main.c foo.c foo.h
これは完全にコンパイルされて実行されましたが、その後私はMakefile.am
が正しくないことに注意します。私のメインコードはfoo.h
に依存していましたが、実際のファイルはfoo/foo.h
でした。
bin_PROGRAMS = main
main_SOURCES = main.c foo.c foo/foo.h
しかし、それは私の不思議製:それは前にあったように、私はそれを変更し、コンパイルが期待通りに働いていた依存関係が間違っていたとき、どのように機能するのですか?うまくいき、foo/foo.h
とmake
を編集しても、依存ファイルを再コンパイルできます。実は、私も...依存関係から
bin_PROGRAMS = main
main_SOURCES = main.c foo.c
をヘッダファイルを削除することもできます...そしてまだ依存ファイルの再コンパイルをトリガーするスキャンされます。
だから、私の質問は以下のとおりです。
- 方法autotoolsの-生成
Makefile
はfoo/foo.h
がmake
呼び出し中に分析するための依存関係であることを知っていますか? - 変数
main_SOURCES
にヘッダファイルを追加する必要がありますか? - 存在しないファイルが依存関係であると宣言しているため、
make
が最初のケースで失敗しないようにしてください。
好奇心ではなく、いくつかの詳細を省略していますか? '-I $(srcdir)/ foo'は' CPPFLAGS'にどのように入っていますか? –
@WilliamPursellまあ、私は実際のシナリオのいくつかの詳細を省略していますが、以下の例は期待通りにコンパイルされています。この場合、 '-I $(srcdir)/ foo'は' foo.c'と 'main.c'の両方にファイル名が含まれているので、' #include "foo/foo.h" 'ここに見られるように(http://pastebin.com/p9d1XNcU)。 – brandizzi