次の構造の autotools で管理されたプロジェクト ( sscce tar.gz パッケージはこちら) があります。
私configure.acは:
AC_INIT([foo], [1.0], [foo@bar.ba])
AM_INIT_AUTOMAKE([foreign -Wall -Werror])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
私Makefile.amは:
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.hmake - ヘッダー ファイルを
main_SOURCES変数に追加する必要がありますか? make存在しないファイルが依存関係であると宣言しているので、最初のケースで失敗するべきではありませんか?