2013-02-23 13 views
6

Pracuję nad projektem, który wymaga podprojektu, który ma swój własny plik makefile i configure.ac. Podprojekt to program, który służy do generowania plików źródłowych dla głównego projektu. Istnieje możliwość wyłączenia budowania tego projektu i podjęcia próby użycia zainstalowanej wersji.Jak uzyskać absolutną ścieżkę do głównego katalogu kompilacji w autoconf configure.ac?

W obu przypadkach tworzę zmienną, która jest używana w pliku Makefile.am zawierającym ścieżkę do programu.

Moje pytanie brzmi: Kiedy mogę skorzystać z lokalnej wersji projektu, w jaki sposób mogę uzyskać jego lokalizację do wykorzystania w pliku Makefile.am?

Próbowałem

FOOPLACE=${abs_top_builddir}/bar/foo 

Ale to zawsze sprawia FOOPLACE zawierać tylko /bar/foo. Nie jestem nawet pewien, czy to będzie właściwa droga, nawet jeśli w zasadzie.

+1

Czy nie powinno to być '$ (abs_top_builddir)' w pliku 'Makefile.am'? –

+0

@BrettHale, ja _believe_ Nie mogę tego zrobić w Makefile, tak jakbym używał zainstalowanej wersji programu, zamiast tego, który byłby zbudowany w moim katalogu źródłowym, wtedy potrzebuję użyć ścieżki do tego zamiast . Czy istnieje sposób obejścia tego? Jeśli byłby sposób na zmodyfikowanie mojej zmiennej 'FOOPLACE' w pliku Makefile, mógłbym umieścić ją w warunku w pliku Makefile, ale to nie działało. – crobar

+0

@ BrettHale: W 'Makefile.am' możesz użyć jednej z nich, ale forma' $() 'jest konwencjonalna. –

Odpowiedz

7

Właśnie zrobiłem kilka testów z prostym configure.ac.

Nie mogłem uzyskać rozsądnej wartości dla $abs_top_builddir, chyba że dokonano substytucji (tj. AC_CONFIG_FILES). Według Preset Output Variables(autoconf) powinny one być co najmniej dostępne podczas config.status (tj. AC_CONFIG_COMMANDS). Oni nie są.

Nurkowanie w config.status, stwierdziłem, że @[email protected] został ustawiony na wartość $ac_abs_top_builddir. Wydaje się to dziwne i myślę, że może to być błąd. I have sent it to bug-autoconf, aby zobaczyć, co myślą.

Morał z historii: powinien działać wszędzie tam, gdzie dokonywane są zmiany. Możesz użyć $ac_abs_top_builddir w config.status, ale nie będę na nim polegać.

Oto testu użyłem:

configure.ac:

AC_PREREQ([2.67]) 
AC_INIT([], [0], [[email protected]]) 
AC_MSG_NOTICE([notice: ${abs_top_builddir}]) 
AC_MSG_NOTICE([notice+ac: ${abs_top_builddir}]) 
AC_CONFIG_COMMANDS_PRE([echo "pre+ac: ${ac_abs_top_builddir}"]) 
AC_CONFIG_COMMANDS_PRE([echo "pre: ${abs_top_builddir}"]) 
AC_CONFIG_COMMANDS_POST([echo "post+ac: ${ac_abs_top_builddir}"]) 
AC_CONFIG_COMMANDS_POST([echo "post: ${abs_top_builddir}"]) 
AC_CONFIG_COMMANDS([echo], 
[echo "config.status+ac: ${ac_abs_top_builddir}" 
echo "config.status: ${abs_top_builddir}"]) 
AC_CONFIG_FILES([test], [chmod +x test]) 
AC_OUTPUT 

test.in:

#!/bin/sh 
# -*- sh -*- 
# @[email protected] 
echo "test: @[email protected]" 
echo "test+ac: @[email protected]" 

uruchomić go z autoconf && ./configure && ./test.