2013-03-16 6 views
5

Ich lerne derzeit, wie man MakeFiles für Programme in C++ erstellt und verwendet. Ich konnte Makefiles für normale CPP-Klassen erstellen und ausführen, aber ich habe ein Problem mit Testklassen. Für die Prüfung bin ich Gtest in Code :: Blocks, und in meiner Test_A.cpp Datei in den "Linker Settings", ergänze ich mit:Einschließlich gtest-Bibliotheken in Makefiles für Unit-Test-Dateien:

/usr/lib/libgtest.a 
/usr/lib/libgtest_main.a 

und für die anderen Linker-Optionen I "-pthread" setzen. Ich weiß, dass diese Bibliotheken irgendwie in das Makefile eingefügt werden müssen, aber ich kann mir nicht vorstellen, wie. Ich ursprünglich dachte, sie in Zeile 3, aber alles hinzugefügt werden muß versuchen, ich kehren Tausende von Zeilen Fehler des Typs:

undefined reference to `testing::Test::TearDown() 
undefined reference to `testing::Test::~Test() etc.... 

Meine Make-Datei:

1. all: Test 

2. Test_A.o: Test_A B.h 
3.  g++ -c Test_A.cpp -o Test_A.o 

4. Test: Test_A.o 
5.  g++ -o Test Test_A.o 

6. clean: 
7.  rm -rf *o *~ 

Antwort

6

Bibliotheken sind auf der Verbindungslinie hinzugefügt:

g++ -o Test Test_A.o /usr/lib/libgtest.a /usr/lib/libgtest_main.a -lpthread 
6

Sie müssten beim Erstellen der endgültigen Binärdatei die Liste der Bibliotheksnamen an den Linker übergeben. LDFLAGS ist eine Variable, die in Makefiles verwendet wird, um die Liste der Flags anzuzeigen, die an den Linker übergeben werden.

  • , um eine Verknüpfung mit einer Bibliothek libabc.a oder libabc.so, benötigen Sie den Linker-Flag als -labc passieren.

  • Um den Speicherort der Bibliotheken anzugeben, müssen Sie das Flag -L verwenden. Beachten Sie, dass der Linker die Verzeichnisse in LD_LIBRARY_PATH für Ihre Bibliotheken zusätzlich zu den in /etc/ld.so.conf definierten Verzeichnissen durchsucht.

Obwohl -L/usr/lib in Ihrem Fall optional ist, (da Ihre Distribution die ld.so.conf so konfiguriert haben, sollten Bibliotheken von /usr/lib bereits abholen), ich habe es unten nur gezeigt, falls Sie ändern möchten es zu einem anderen Ort.

LDFLAGS := -lpthread -lgtest -lgtest_main -L/usr/lib 

all: Test 

Test_A.o: Test_A B.h 
    g++ -c Test_A.cpp -o Test_A.o 

Test: Test_A.o 
    g++ -o Test Test_A.o $(LDFLAGS) 

clean: 
    rm -rf *o *~ 
+0

ich musste nach -lgtest_main.a setzen -lpthread, wie pro https://stackoverflow.com/questions/10315016/error-during-making-gtest – Will