tengo un proyecto de autotools gestionados (sscce paquete tar.gz here) con esta estructura:¿Autoflores Makefile considera automáticamente los archivos de encabezado incluidos como dependencias?
Mi configure.ac
es:
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
Mi Makefile.am
eran :
bin_PROGRAMS = main
main_SOURCES = main.c foo.c foo.h
Se compiló y funcionó perfectamente ... pero luego observo que mi Makefile.am
no era correcto. Estableció que mi código principal dependía de foo.h
, pero el archivo real era foo/foo.h
. He cambiado, y la compilación estaba trabajando como era de esperar, como lo era antes:
bin_PROGRAMS = main
main_SOURCES = main.c foo.c foo/foo.h
Sin embargo, me hizo extrañar: ¿cómo funcionaba cuando las dependencias estaban equivocados? Funcionó tan bien que incluso pude editar foo/foo.h
y make
volvería a compilar los archivos dependientes. De hecho, podría incluso eliminar el archivo de cabecera de las dependencias ...
bin_PROGRAMS = main
main_SOURCES = main.c foo.c
... y sería todavía un escaneado daría lugar a la recopilación de archivos dependientes.
Por lo tanto, mis preguntas son:
- ¿Cómo las autotools-generados
Makefile
saben quefoo/foo.h
es una dependencia para ser analizados durante la invocaciónmake
? - ¿Debo agregar los archivos de encabezado a la variable
main_SOURCES
? - ¿No debería fallar
make
en el primer caso, ya que estoy declarando que un archivo inexistente es una dependencia?
Por curiosidad, ¿omite algunos detalles? ¿Cómo entra '-I $ (srcdir)/foo' en' CPPFLAGS'? –
@WilliamPursell Bueno, estoy omitiendo algunos detalles de mi escenario * real *, pero el siguiente ejemplo se compila como se esperaba. En este caso, no hay necesidad de '-I $ (srcdir)/foo' porque ambos' foo.c' y 'main.c' incluyen el archivo con el nombre de directorio:' #include "foo/foo.h" 'como se ve [aquí] (http://pastebin.com/p9d1XNcU). – brandizzi