次の構造の 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.h
make
- ヘッダー ファイルを
main_SOURCES
変数に追加する必要がありますか? make
存在しないファイルが依存関係であると宣言しているので、最初のケースで失敗するべきではありませんか?