我有一个具有以下结构的自动工具管理项目(此处为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
...并且它仍然会被扫描并会触发依赖文件的重新编译。
所以,我的问题是:
- 自动工具生成的如何
Makefile
知道这是在调用foo/foo.h
期间要分析的依赖项?make
- 我应该将头文件添加到
main_SOURCES
变量中吗? - 在第一种情况下不应该
make
失败,因为我声明一个不存在的文件是一个依赖项?