como definir o diretório top no sistema automake?

0

Eu costumo usar os passos típicos para gerar o makefile, e primeiramente eu uso o "build.sh init" para gerar o arquivo de configuração, e então eu uso "configure" para gerar o makefile com o arquivo makefile.am. Agora eu quero estiminar o "../../" em algum arquivo de inclusão como include "../../dirA/dirB/Ch", apenas escrevê-lo como include "dirA / dirB / Ch", então as configurações de configure.ac ou makefile.am deve ser modificado. Quem pode ajudar a resolver isso?

    
por Casa 21.12.2014 / 10:04

1 resposta

1

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á.

    
por 17.06.2015 / 03:35

Tags