Jak mohu nastavit automake a autoconf podmíněně stavět programy (zkoušky nebo jinak)

hlasů
2

I v současné době 10 testů v mém autotoolset projektu. Kdykoliv jsem se provést změnu jednoho z mých src / soubory a překompilovat, každý test je přestavěn a spojen. To začíná mít značný vliv na mé doby vývoje.

Jaký je nejlepší způsob, jak budovat podmíněně binární programy, testy, či nikoli, s GNU autotoolset? Například, když jsem pracoval v testovacím / check_curl_requestheaders.cc a jsem udělat změnu, já jen bude chtít překompilovat knihovnu a pak to jeden test a žádný z dalších binárních souborů.

Viděl jsem nějakou zmínku o použití Automake podmiňovací způsob (např WANTS_XXX), ale nejsem si 100% jistý, že je to, co jsem hledal, ani jsem si jistý, jak by to být konfigurovány autoconf.

Já jsem tak nějak doufal, že něco, co skončí vypadat jako toto:

./configure
make test/check_curl_requestheaders

nebo

./configure --only-build=test/check_curl_requestheaders
make

Ukazatele?

EDIT Nedělám si configure před každým dělat. Mám-li provést změny check_curl_requestheaders, jen check_curl_requestheadersje přestavěn jak by se dalo očekávat. Problém je, že když jsem pracoval na requestHeaders části knihovny, a aby změna říci, src / curl / requestheaders.cc, všechny testy a další binární soubory jsou vytvořena, ne jen check_curl_requestheaders. Že trvá příliš dlouho, a to je to, co se snažím, aby se zabránilo. Mám-li tucet binární soubory, je tu způsob, jak obnovit pouze jeden z nich?

Položena 17/07/2009 v 03:17
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
2

Jsem zmatený. V každém projektu, co jsem kdy pracoval, běh ‚make‘ buď z $ {top_builddir} nebo $ {top_builddir} / Testy / nebudou znovu sestavit nebo spustit nějaké testy. Testy jsou pouze vestavěné a popraven za ‚make kontroly‘. Používáte check_PROGRAMS ve svém Makefile.am?

Obecně platí, že podmíněný překlad je nakládáno s Automake conditionals a Makefile.am úryvky jako jsou:

pokud WANT_FOO
bin_PROGRAMS + = foo
endif

ale jsem si jistý, že to není to, co jste hledali. To zní, jako byste zadali falešné závislosti na Makefile.am, a vy byste měli psát minimální verzi ní / nimi.

PS: v shell skript, můžete prostě dělat

export OUT
...
(Cd src && make >> $ OUT) || exit 3
Odpovězeno 22/07/2009 v 10:54
zdroj uživatelem

hlasů
0

Nejsem si jist, že to je nejlepší způsob, jak to udělat, ale ukázalo se, že programy v mém testovacím složce se mají své vlastní jedinečné make cíle. Nicméně, tam byly některé problémy.

  1. Kdybych vydat, aby na nejvyšší úrovni, všichni src / a test / jsou postaveny
  2. Kdybych vydat, aby při zkušebním / úrovni změny src / nebudou vyzvednout

K vyřešení tohoto problému, jsem napsal shell skript, který dělá následující:

  1. Vstoupit do src a postavit. (V případě změny src / nestalo, src / je přestavěn)
  2. Vstoupit do testování a budovat konkrétní binární. (To bude znovu konkrétní binární, pokud se změnila a bude znovu propojit kódu v src / byl aktualizován v předchozím kroku)

Kód je uveden níže:

#!/bin/sh

TYPE="$1"
WHICH="$2"
OUT="`readlink -f ./buildandrun.out`"

rm -rf $OUT

if test ! -n "$WHICH"
then
    echo "Please specify which type to build"
    exit 1
fi

if test ! -n "$WHICH"
then
    echo "Please specify which $TYPE to build"
    exit 2
fi

RV=0

echo "" >> $OUT
echo "Building src" >> $OUT
echo "" >> $OUT

cd src
make >> $OUT || RV=3
cd ..

if test $RV != 0; then exit $RV; fi

echo "" >> $OUT
echo "Building $TYPE/$WHICH" >> $OUT
echo "" >> $OUT

cd $TYPE
make "$WHICH" >>  $OUT || RV=4
cd ..

if test $RV != 0; then exit $RV; fi

echo "" >> $OUT
echo "Running $TYPE/$WHICH" >> $OUT
echo "" >> $OUT

$TYPE/$WHICH || RV=5

exit $RV

To mi umožňuje provést následující:

./buildandrun.sh test check_curl_requestheaders

Doufejme, že nakonec bude někdo, kdo mi může ukázat více elegantní řešení tohoto problému, pokud možno s použitím autoconf a automake. Mám pocit, že je to pravděpodobně něco, co tyto nástroje provést po vybalení z krabice a já jsem ještě neobjevili ho.

Odpovězeno 18/07/2009 v 01:49
zdroj uživatelem

hlasů
0

Změníte-li nějaký zdrojový soubor, neměli byste mít překonfigurovat vůbec. Stačí spustit, aby se znovu, a to by mělo obnovit pouze ty binární soubory, které jsou ve skutečnosti ovlivněny změnou. Takže když změníte test/check_curl_requestheaders, pak se dělat rovinu make, pak teprve test/check_curl_requestheadersby měl být přestavěn, v každém případě. Pokud něco dostane přestavěna také, že máte chybu v makefile.

Samozřejmě, pokud nechcete konfigurovat první (což byste neměli), není divu, že více věcí dostane přestavěn.

Edit : Chcete-li změnit knihovnu, a pak chtějí jen přestavět jedinou zkoušku, pak

make test/check_curl_requestheaders

by měla být dostatečná. To by vyžadovalo, abyste měli cíl pojmenovanou test/check_curl_requestheadersv korenovém makefile. Že cíl může vypadat

test/%:    library
    make -C test $*

za předpokladu, že mají samostatný Makefile ve zkušebním adresáři, a za předpokladu, že tento makefile předpokládá, že knihovna je již postaven.

Odpovězeno 17/07/2009 v 03:47
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more