A primeira coisa a notar, é que o sistema de configuração tem dois top_dir's. Um diretório principal para onde o código-fonte reside e um diretório superior para onde o código é construído. Muitas vezes, esses dois diretórios são os mesmos. Mas há situações em que o código-fonte reside em um sistema de arquivos somente leitura, então você precisa criar o software em outro lugar. Abaixo, vou usar o diretório de criação principal, observando novamente que isso pode ser o mesmo que o diretório de origem principal.
O autoconf já define algumas variáveis para o diretório de criação principal. Um deles é chamado "abs_top_builddir".
Digamos que o arquivo de inclusão que você deseja usar "abs_top_builddir" seja chamado de x.h
. Você criaria um arquivo chamado x.h.in
A maneira como você se refere a essa variável nesse arquivo é cercá-la com '@'. Então você pode ter:
#include "@abs_top_builddir@/A/dirB/C.h"
A outra coisa que você precisa fazer é dizer ao script configure para criar o arquivo de cabeçalho x.h
de x.h.in
. Você faz isso adicionando
AC_CONFIG_FILES([x.h])
AC_OUTPUT
ao final de configure.ac . Você só precisa de um AC_OUTPUT
, então se essa linha já estiver lá, não será necessário adicioná-la novamente. Agora, execute autoconf
para criar o script de configuração e, quando você executar configure
, deverá ver
configure: creating x.h
Verifique x.h
e certifique-se de que a linha de inclusão é o que você espera.
E tendo escrito todos os itens acima, eu também devo salientar que isso é o que geralmente não é feito. Em vez disso, em CFLAGS
ou alguma variável com nome semelhante, você apenas inclui o diretório. Por exemplo, um Makefile.am pode ter:
AM_CPPFLAGS = -I$(top_srcdir)
Aqui estou mudando para srcdir porque não preciso criar o cabeçalho como antes. E você provavelmente não precisará adicionar linhas adicionais a configure.ac porque essas linhas provavelmente já estarão lá.