Pacotes aninhados para subdiretórios diferentes no autoconf?

2

Eu tenho subdiretórios diferentes que precisam ser compilados de maneiras diferentes. Por exemplo, alguns arquivos precisam incluir alguns outros usando CFLAGS. No entanto, CFLAGS só pode ser definido em arquivos de configuração, então eu acho que preciso de vários configure.ac.

É uma boa idéia usar pacotes aninhados (como descrito em gnu.org ) por isso, ou isso é um exagero?

Nota: Eu chamo de exagero porque a solução do gnu.org adiciona um README, etc., no subdiretório every . Isso pode ser evitado?

    
por Johannes 24.07.2013 / 12:58

1 resposta

0

Se você não quiser que o README, etc inclua, adicione a opção foreign . Por exemplo, no seu arquivo configure.ac , adicione:

AM_INIT_AUTOMAKE([foreign])

Veja Strictness no manual do Automake

É possível ter um arquivo de configuração que defina vários tipos de sinalizadores C usados nos subdiretórios. Mas, a menos que você queira começar a se tornar um sério hacker de automake, eu começaria com a solução simples e usaria foreign .

Aqui está um pequeno exemplo para mostrar como CFLAGS pode ser definido de outras coisas. Para simplificar, apenas definirei CFLAGS com base em outra variável de ambiente, para não ter que lidar com argumentos de configuração. E eu vou definir CFLAGS no arquivo principal enquanto o que você quer fazer é em um arquivo de subdiretório. Espero que tudo isso seja simples de mudar.

Meu arquivo configure.ac é:

AC_INIT([foo], [1.0], [https://example.com])
AM_INIT_AUTOMAKE()
AC_SUBST(PROJ1_CFLAGS)
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

Meu arquivo Makefile.am é:

CFLAGS=@PROJ1_CFLAGS@

Agora, crie tudo:

$ autoreconf -fi
$ autoconf
$ CFLAGS='-g' PROJ1_CFLAGS='-Wall' ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
$

Se você procurar no Makefile, verá:

CFLAGS='-Wall'

que, na verdade, foi definido a partir da variável de ambiente PROJ1_CFLAGS , não da variável de ambiente CFLAGS .

    
por 21.06.2015 / 23:10