2015-03-25 22 views
5

Pracuję w projekcie z innymi ludźmi w zespole używając autotoolów GNU. W projekcie używamy testu jednostkowego dla każdej niebanalnej klasy C++. Dowiedziałem się, że istnieje wsparcie dla testów jednostkowych. Do tego używam tej struktury:Testy jednostkowe za pomocą Automake

./ 
    + tests/ 
    + Makefile.am 
    + classA_test.cc 
    .... 
    + classB_test.cc 
    + src/ 
    + lib/ 
    + Makefile.am 

Problem zaczyna się, ponieważ mój główny Makefile.am korzysta podkatalog-objects opcje --note że nie używam rekurencyjną makefile dla źródła files--, ja nie mogę eksportować moich zmiennych - takich jak AM_CPPFLAGS - do drugiego pliku Makefile. Do tej pory zrobiłem to działa na podstawie:

$ make check  

ale wciąż otrzymuję problemy dla ścieżek i opcji kiedy robię

$ make distcheck 

więc moje pytania są, jak to standardowy sposób do czynienia z jednostką testy?

EDIT:

Zrobiłem to działa tak długo, jak usunąć podkatalog-obiekty z testów/Makefile.am. Teraz rzuca pewne ostrzeżenia, ale kompiluje. Nadal nie wydaje się być właściwym sposobem radzenia sobie z testów jednostkowych

+0

Jak się teraz ustawienie 'AM_CPPFLAGS'? Czy używasz 'AC_SUBST' dla zmiennych w' configure.ac'? –

+0

W głównym Makefile.am ustawiam globalne FLAGI i używam AC_SUBST dla dodatkowych zmiennych –

Odpowiedz

1

Po niektóre badania I wymyślił jest właściwa sposób na radzenie sobie z testów jednostkowych i Automake:

następstwie poprzedniego schematu:

./ 
+ tests/ 
    + Makefile.am 
    + classA_test.cc 
    .... 
    + classB_test.cc 
+ src/ 
+ lib/ 
+ Makefile.am 

makefile.am w korzeniu będzie głównym jeden, ten wywołuje Makefile w katalogu testów

$ cat Makefile.am 
SUBDIRS = . tests # (Super Important) note the "." before tests, 
        # it means it will be executed first 
.... 

$ cat test/Makefile.am 
AM_CXXFLAGS = ... 
AM_LDFLAGS = -L @[email protected]/lib #If needed 
LDADD  = -llibraryfortests #If needed 

TESTS = test1 .. testN 
test1_SOURCES = test1.cc ../src/somewhere/classtotest.cc 
testN_SOURCES = ... 

$ cat configure.ac 
AM_INIT_AUTOMAKE([subdir-objects]) 
AC_CONFIG_FILES([Makefile])                                         
AC_CONFIG_FILES([tests/Makefile]) 
... 

teraz, jeśli chcesz uruchomić testy

$ sh ../pathto/configure 
$ make check 

Jak dobrze dist [check] powinien działać

$ make distcheck 
... 
make[3]: Entering directory `/home/vicente/test/tests' 
PASS: settings 
============================================================================ 
Testsuite summary for Pepinos 00.13.15 
============================================================================ 
# TOTAL: 1 
# PASS: 1 
# SKIP: 0 
# XFAIL: 0 
# FAIL: 0 
# XPASS: 0 
# ERROR: 0 
============================================================================ 
make[3]: Leaving directory `/home/vicente/test/tests' 
... 

Więc odpowiedzieć na inne pytanie?

Q. Nie mogę eksportować zmiennych - takich jak AM_CPPFLAGS - do innych plików Makefile.

A. To prawda, ale zawsze mogę zadeklarować zmienną w configure.ac i AC_SUBT aby był on widoczny dla innych Makefile.am

Źródła: https://stackoverflow.com/a/29255889/2420872