Debian ne fournit plus de paquet précompilé pour gTest. Ils vous suggèrent d'intégrer le framework dans le makefile de votre projet. Mais je veux garder mon makefile propre. Comment configurer gTest comme les anciennes versions (<1.6.0), afin de pouvoir créer un lien avec la bibliothèque?
c++
linux
unit-testing
installation
googletest
ManuelSchneid3r
la source
la source
./configure && make && make install
flux de travail standard devrait fonctionner correctement . Je ne sais pas si cela justifie un article car ce ne serait pas différent de la compilation de nombreux autres paquets à partir des sources.Réponses:
Avant de commencer, assurez-vous d'avoir lu et compris cette note de Google ! Ce tutoriel facilite l'utilisation de gtest, mais peut introduire des bugs désagréables .
1. Obtenez le framework googletest
wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz
Ou obtenez-le à la main . Je ne maintiendrai pas ce petit guide pratique, donc si vous êtes tombé dessus et que les liens sont obsolètes, n'hésitez pas à le modifier.
2. Décompressez et construisez google test
tar xf release-1.8.0.tar.gz cd googletest-release-1.8.0 cmake -DBUILD_SHARED_LIBS=ON . make
3. "Installez" les en-têtes et les bibliothèques sur votre système.
Cette étape peut différer d'une distribution à l'autre, assurez-vous donc de copier les en-têtes et les bibliothèques dans le bon répertoire. J'ai accompli cela en vérifiant où se trouvaient les anciennes bibliothèques gtest de Debians . Mais je suis sûr qu'il existe de meilleures façons de le faire. Remarque:
make install
est dangereux et non pris en charge4. Mettez à jour le cache de l'éditeur de liens
... et vérifiez si GNU Linker connaît les bibliothèques
Si la sortie ressemble à ceci:
libgtest.so.0 -> libgtest.so.0.0.0 libgtest_main.so.0 -> libgtest_main.so.0.0.0
alors tout va bien.
gTestframework est maintenant prêt à être utilisé. N'oubliez pas de lier votre projet à la bibliothèque en définissant
-lgtest
comme indicateur de l'éditeur de liens et éventuellement, si vous n'avez pas écrit votre propre programme principal de test, l'-lgtest_main
indicateur explicite .À partir de là, vous voudrez peut-être accéder à la documentation de Google et aux anciens documents sur le framework pour savoir comment cela fonctionne. Bon codage!
Edit: Cela fonctionne aussi pour OS X! Voir "Comment configurer correctement googleTest sur OS X"
la source
make install
cible que vous pouvez utiliser au lieu de copier manuellement la bibliothèque et les en-têtes?'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system.
include/gtest
pour autant que je sache.sudo cp -a libgtest_main.so libgtest.so /usr/lib/
cela ne fonctionne plus. Le fichier n'est même pas là pour commencer.Permettez-moi de répondre à cette question spécifiquement pour les utilisateurs d'ubuntu. Commencez par installer le package de développement gtest.
Notez que ce package installe uniquement les fichiers source. Vous devez compiler le code vous-même pour créer les fichiers de bibliothèque nécessaires. Ces fichiers source doivent être situés dans / usr / src / gtest. Accédez à ce dossier et utilisez cmake pour compiler la bibliothèque:
sudo apt-get install cmake # install cmake cd /usr/src/gtest sudo mkdir build cd build sudo cmake .. sudo make sudo make install
Maintenant, pour compiler vos programmes qui utilisent gtest, vous devez le lier avec:
Cela a parfaitement fonctionné pour moi sur Ubuntu 14.04LTS.
la source
sudo cp *.a /usr/lib
procéder manuellement , il suffit de le repalonner avecsudo make install
devrait être bien.Il m'a fallu un certain temps pour comprendre cela car le "make install" normal a été supprimé et je n'utilise pas cmake. Voici mon expérience à partager. Au travail, je n'ai pas accès root sur Linux, donc j'ai installé le framework de test Google sous mon répertoire personnel:
~/usr/gtest/
.Pour installer le package dans ~ / usr / gtest / en tant que bibliothèques partagées, avec un exemple de build également:
$ mkdir ~/temp $ cd ~/temp $ unzip gtest-1.7.0.zip $ cd gtest-1.7.0 $ mkdir mybuild $ cd mybuild $ cmake -DBUILD_SHARED_LIBS=ON -Dgtest_build_samples=ON -G"Unix Makefiles" .. $ make $ cp -r ../include/gtest ~/usr/gtest/include/ $ cp lib*.so ~/usr/gtest/lib
Pour valider l'installation, utilisez le test.c suivant comme exemple de test simple:
#include <gtest/gtest.h> TEST(MathTest, TwoPlusTwoEqualsFour) { EXPECT_EQ(2 + 2, 4); } int main(int argc, char **argv) { ::testing::InitGoogleTest( &argc, argv ); return RUN_ALL_TESTS(); }
Compiler:
$ export GTEST_HOME=~/usr/gtest $ export LD_LIBRARY_PATH=$GTEST_HOME/lib:$LD_LIBRARY_PATH $ g++ -I $GTEST_HOME/include -L $GTEST_HOME/lib -lgtest -lgtest_main -lpthread test.cpp
la source
lgtest_main
), il n'est pas nécessaire de définir le vôtremain
dans le fichier de test.Si vous utilisez CMake, vous pouvez l'utiliser
ExternalProject_Add
comme décrit ici .Cela vous évite d'avoir à conserver le code source gtest dans votre référentiel ou à l'installer n'importe où. Il est téléchargé et intégré automatiquement dans votre arborescence de construction.
la source
Mise à jour pour Debian / Ubuntu
Google Mock (package :)
google-mock
et Google Test (package:)libgtest-dev
ont été fusionnés. Le nouveau package est appelégoogletest
. Les deux anciens noms sont toujours disponibles pour des raisons de compatibilité ascendante et dépendent désormais du nouveau packagegoogletest
.Ainsi, pour obtenir vos bibliothèques à partir du référentiel de packages, vous pouvez effectuer les opérations suivantes:
sudo apt-get install googletest -y cd /usr/src/googletest sudo mkdir build cd build sudo cmake .. sudo make sudo cp googlemock/*.a googlemock/gtest/*.a /usr/lib
Après cela, vous pouvez créer un lien vers
-lgmock
(ou contre-lgmock_main
si vous n'utilisez pas de méthode principale personnalisée) et-lpthread
. C'était suffisant pour utiliser Google Test dans mes cas au moins.Si vous voulez la version la plus récente de Google Test, téléchargez-la depuis github. Après cela, les étapes sont similaires:
git clone https://github.com/google/googletest cd googletest sudo mkdir build cd build sudo cmake .. sudo make sudo cp lib/*.a /usr/lib
Comme vous pouvez le voir, le chemin où les bibliothèques sont créées a changé. Gardez à l'esprit que le nouveau chemin pourrait également être bientôt valide pour les référentiels de packages.
Au lieu de copier les bibliothèques manuellement, vous pouvez utiliser
sudo make install
. Cela fonctionne "actuellement", mais sachez que cela n'a pas toujours fonctionné dans le passé. De plus, vous ne contrôlez pas l'emplacement cible lorsque vous utilisez cette commande et vous ne voudrez peut-être pas polluer/usr/lib
.la source
J'ai été également déçu par cette situation et j'ai fini par créer mes propres packages sources Ubuntu pour cela. Ces packages sources vous permettent de produire facilement un package binaire. Ils sont basés sur la dernière source gtest & gmock de ce post.
Package source Google Test DEB
Package source Google Mock DEB
Pour créer le package binaire, procédez comme suit:
tar -xzvf gtest-1.7.0.tar.gz cd gtest-1.7.0 dpkg-source -x gtest_1.7.0-1.dsc cd gtest-1.7.0 dpkg-buildpackage
Cela peut vous dire que vous avez besoin de certains paquets pré-requis, auquel cas il vous suffit de les installer par apt-get. En dehors de cela, les paquets binaires .deb construits devraient alors se trouver dans le répertoire parent.
Pour GMock, le processus est le même.
En remarque, bien que cela ne soit pas spécifique à mes paquets sources, lorsque vous liez gtest à votre test unitaire, assurez-vous que gtest est inclus en premier ( https://bbs.archlinux.org/viewtopic.php?id=156639 ) Cela ressemble à un gotcha commun.
la source
testing::Message::Message()' test.cpp:(.text+0x84): undefined reference to
testing :: internal :: AssertHelper :: AssertHelper (testing :: TestPartResult :: Type, char const *, int, char const *) 'test. cpp :(. text + 0x97): référence indéfinie à `testing :: internal :: AssertHelper :: operator = (testing :: Message const &) const '... c'est si long que je ne peux pas poster le tout. Je l'ai fait dans une toute nouvelle VM Ubuntu 14.04, donc rien d'autre n'a été installé à l'exception des dépendances nécessaires.#include <gtest/gtest.h> TEST(MathTest, TwoPlusTwoEqualsFour) { EXPECT_EQ(2 + 2, 4); } int main(int argc, char **argv) { ::testing::InitGoogleTest( &argc, argv ); return RUN_ALL_TESTS(); }
Juste au cas où quelqu'un d'autre se retrouverait dans la même situation que moi hier (22/06/2016) et ne réussirait pas non plus avec les approches déjà publiées -
Lubuntu 14.04
cela a fonctionné pour moi en utilisant la chaîne de commandes suivante:git clone https://github.com/google/googletest cd googletest cmake -DBUILD_SHARED_LIBS=ON . make cd googlemock sudo cp ./libgmock_main.so ./gtest/libgtest.so gtest/libgtest_main.so ./libgmock.so /usr/lib/ sudo ldconfig
la source
Cette réponse de askubuntu est ce qui a fonctionné pour moi. Cela semble plus simple que les autres options et moins sujet aux erreurs, car il utilise un package
libgtest-dev
pour obtenir les sources et les builds à partir de là: /ubuntu/145887/why-no-library-files-installed-for-google- test? answertab = votes # tab-topVeuillez vous référer à cette réponse, mais juste comme raccourci, je fournis les étapes ici aussi:
Après cela, je pourrais construire mon projet qui dépend de
gtest
sans aucun problème.la source
La méthode suivante évite de manipuler manuellement le
/usr/lib
répertoire tout en nécessitant une modification minimale de votreCMakeLists.txt
fichier. Il permet également à votre gestionnaire de packages de se désinstaller proprementlibgtest-dev
.L'idée est que lorsque vous recevez le
libgtest-dev
colis viaLa source est stockée dans l'emplacement
/usr/src/googletest
Vous pouvez simplement pointer votre
CMakeLists.txt
vers ce répertoire afin qu'il puisse trouver les dépendances nécessairesRemplacez simplement
FindGTest
paradd_subdirectory(/usr/src/googletest gtest)
À la fin, ça devrait ressembler à ça
la source
Cela installera google test et mock library dans le système basé sur Ubuntu / Debian:
Testé dans Google Cloud dans une image basée sur Debian.
la source
googlemock
, mais il ne s'installe pasgoogletest
(gtest). Du moins c'est ce qui m'est arrivé.Cela construira et installera à la fois gtest et gmock 1.7.0:
mkdir /tmp/googleTestMock tar -xvf googletest-release-1.7.0.tar.gz -C /tmp/googleTestMock tar -xvf googlemock-release-1.7.0.tar.gz -C /tmp/googleTestMock cd /tmp/googleTestMock mv googletest-release-1.7.0 gtest cd googlemock-release-1.7.0 cmake -DBUILD_SHARED_LIBS=ON . make -j$(nproc) sudo cp -a include/gmock /usr/include sudo cp -a libgmock.so libgmock_main.so /usr/lib/ sudo cp -a ../gtest/include/gtest /usr/include sudo cp -a gtest/libgtest.so gtest/libgtest_main.so /usr/lib/ sudo ldconfig
la source
Pour la version 1.8.1 basée sur la réponse de @ ManuelSchneid3r, je devais faire:
wget github.com/google/googletar xf release-1.8.1.tar.gz tar xf release-1.8.1.tar.gz cd googletest-release-1.8.1/ cmake -DBUILD_SHARED_LIBS=ON . make
J'ai ensuite fait
make install
ce qui semblait fonctionner pour la version 1.8.1, mais en suivant @ ManuelSchneid3r, cela signifierait:la source