2015-03-25 12 views
5

Ich arbeite in einem Projekt mit anderen Leuten im Team mit GNU Autotools. Im Projekt verwenden wir Unit-Test für jede nicht-triviale C++ - Klasse. Ich habe herausgefunden, dass es eine Unterstützung für Komponententests gibt. Dafür habe ich diese Struktur bin mit:Unit Tests mit Automake

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

Das Problem kommt, da mein Haupt Makefile.am verwendet subdir-Objekte Optionen --Anmerkung, dass ich nicht rekursive Make-Datei für die files-- Quelle bin ich kann meine Variablen - wie AM_CPPFLAGS-- nicht in das andere Makefile exportieren. Bisher habe ich es mit Arbeit:

$ make check  

aber ich erhalte immer Probleme für die Wege und die Optionen, wenn ich

$ make distcheck 

Also meine Fragen ist, wie ist der normale Weg, mit dem Gerät umgehen Tests?

EDIT:

ich es so lange gemacht arbeiten, wie ich die subdir-Objekte aus den Tests/Makefile.am entfernen. Jetzt wirft es einige Warnungen, aber es kompiliert. Dennoch scheint es nicht ein geeigneter Weg zu sein, um mit Unit-Tests

+0

Wie setzen Sie 'AM_CPPFLAGS' jetzt? Und verwenden Sie 'AC_SUBST' für Variablen in' configure.ac'? –

+0

In der Haupt-Makefile.am setze ich die globalen FLAGS und ich verwende AC_SUBST für zusätzliche Variablen –

Antwort

1

Nach einigen Recherchen hat ich mit der sachgemäßen Art und Weise kam zu befassen sie mit Unit-Tests und Automake:

Nach der früheren Regelung:

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

die makefile.am in der Wurzel wird die wichtigste sein, nennt dies eine der Make-Datei im Verzeichnis tests

$ 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]) 
... 

Nun, wenn Sie die Tests ausführen möchten

$ sh ../pathto/configure 
$ make check 

Neben dist [Test] sollte funktionieren

$ 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' 
... 

So die andere Frage zu beantworten?

Q. Ich kann meine Variablen - wie, AM_CPPFLAGS-- nicht in das andere Makefile exportieren.

A. Das stimmt, aber ich kann immer eine Variable in der configure.ac erklären und AC_SUBT, um es an andere Makefile.am

Quellen sichtbar zu machen: https://stackoverflow.com/a/29255889/2420872