Come posso costruire un test di unità googletest utilizzando la libreria gtest_main con Jam?

StackOverflow https://stackoverflow.com/questions/3893569

  •  28-09-2019
  •  | 
  •  

Domanda

Sto cercando di costruire uno unit test googletest per un proof of concept come nuovo quadro unit testing che potevamo usare. In googletest, ci sono due modi per scrivere una prova di unità: con principale, o senza un principale. Se non si definisce una principale, è possibile collegare nella biblioteca gtest_main, che include una funzione main () per voi, consentendo di risparmiare un po 'di tempo. Nel mio ambiente, usiamo Jam a file binari della build. Ho acquistato il binario di compilare con main () nel mio codice e utilizzando la libreria libgtest, ma sto cercando il modo di costruire in Jam senza il principale.

Caso base (con una funzione main ()):

Sono in grado di costruire un binario con questo:

Main MyUnitTestBinary : MyClass.cpp ;
LinkLibraries MyUnitTestBinary : libgtest ;
Library libgtest : $(GTEST_DIR)/src/gtest-all.cc ;

caso rotto (senza funzione main ()):

Io non sono in grado di costruire un binario con questo. Vedo molti errori quando tento di collegare gli oggetti:

Main sample1_unittest : sample1.cc sample1_unittest.cc ;
LinkLibraries sample1_unittest : gtest_main ;
Library gtest_main : $(GTEST_DIR)/src/gtest_main.cc ;

ottengo molti errori del linker relative alla undefined reference to bla. Il riferimento non definito sembra venire dal test :: interna dello spazio dei nomi, che non fa parte del mio codice.

Qualche idea su come posso attaccare questo, o cercare ulteriori indizi sul problema?

È stato utile?

Soluzione

Ho trovato la risposta! Non ero in modo non corretto aggiungendo libgtest e gtest_main al binario. Ho pensato che gtest_main comprendeva anche le definizioni per il quadro, e si serviva per collegare uno o l'altro. In realtà, è sempre necessario collegarsi libgtest, ed è necessario collegarsi gtest_main solo se non si desidera modificare la funzione principale standard ().

Quindi ... la risposta corretta è quello di aggiungere:

LinkLibraries sample1_unittest : libgtest gtest_main ;
Library libgtest : $(GTEST_DIR)/src/gtest-all.cc ;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top