Debian ne fournit plus de paquets précompilés pour gTest. Ils vous suggèrent d'intégrer le cadre dans votre makefile de projets. Mais je veux garder mon fichier make propre. Comment configurer gTest comme les versions précédentes (<1.6.0), afin de pouvoir lier une bibliothèque à la bibliothèque?
Avant de commencer, assurez-vous d'avoir lu et compris cette note de Google ! Ce tutoriel facilite l'utilisation de gtest, mais peut introduire méchants bugs .
wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz
Ou l'obtenir par hand . Je ne maintiendrai pas ce petit guide pratique, donc si vous tombez sur lui et que les liens sont obsolètes, n'hésitez pas à le modifier.
tar xf release-1.8.0.tar.gz
cd googletest-release-1.8.0
cmake -DBUILD_SHARED_LIBS=ON .
make
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 ceci en vérifiant où les anciennes bibliothèques Debian de Debian étaient situées. Mais je suis sûr qu'il existe de meilleures façons de le faire. Remarque: make install
est dangereux et n'est pas pris en charge.
$ Sudo cp -a include/gtest /usr/include
$ Sudo cp -a libgtest_main.so libgtest.so /usr/lib/
... et vérifiez si le GNU Linker connaît les libs
$ Sudo ldconfig -v | grep gtest
Si le résultat ressemble à ceci:
libgtest.so.0 -> libgtest.so.0.0.0
libgtest_main.so.0 -> libgtest_main.so.0.0.0
, 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 routine principale de test, l'indicateur explicite -lgtest_main
.
A partir de là, vous voudrez peut-être consulter Googles documentation à propos du framework pour savoir comment il fonctionne. Bonne codage!
Edit: Cela fonctionne aussi pour OS X! Voir "Comment configurer correctement googleTest sur OS X"
Permettez-moi de répondre à cette question en particulier pour les utilisateurs d'ubuntu… .. Commençons par installer le paquet de développement gtest.
Sudo apt-get install libgtest-dev
Notez que ce paquet 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 sources 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 cmake CMakeLists.txt
Sudo make
# copy or symlink libgtest.a and libgtest_main.a to your /usr/lib folder
Sudo cp *.a /usr/lib
Maintenant, pour compiler vos programmes qui utilisent gtest, vous devez le lier avec:
-lgtest -lgtest_main
Cela a fonctionné parfaitement pour moi sur Ubuntu 14.04LTS.
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 d’accès root sur Linux. J’ai donc installé le framework de test Google sous mon répertoire personnel: ~/usr/gtest/
.
Pour installer le paquet dans ~/usr/gtest/en tant que bibliothèques partagées, avec également un exemple de construction:
$ 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 fichier 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
Si vous utilisez CMake, vous pouvez utiliser ExternalProject_Add
tel que décrit ici .
Cela vous évite d'avoir à garder le code source de gtest dans votre référentiel ou à l'installer n'importe où. Il est téléchargé et intégré automatiquement dans votre arbre de compilation.
De la même manière, j'étais déçu par cette situation et j'ai fini par créer mes propres paquets source Ubuntu à cette fin. Ces paquets sources vous permettent de produire facilement un paquet binaire. Ils sont basés sur la dernière source de gtest & gmock de ce post.
Package Google Test DEB Source
Pour construire le paquet 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 vous indiquera peut-être que vous avez besoin de certains paquetages pré-requis, auquel cas il vous suffit d'installer apt-get pour les installer . En dehors de cela, les paquets binaires construits .deb devraient alors se trouver dans le répertoire parent.
Pour GMock, le processus est le même.
En remarque, bien que n'étant pas spécifique à mes paquets source, lors de la liaison de gtest à votre test unitaire, assurez-vous qu'il est d'abord inclus ( https://bbs.archlinux.org/viewtopic.php?id=156639 ) Cela semble être un piège commun.
Juste au cas où quelqu'un d'autre se retrouverait dans la même situation que moi hier (2016-06-22) et ne réussirait pas non plus avec les approches déjà publiées - sur 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
Cette réponse de askubuntu est ce qui a fonctionné pour moi. Cela semble plus simple que d’autres options, moins sujet aux erreurs, car il utilise le paquetage libgtest-dev
pour obtenir les sources et les compiler à partir de là: https://askubuntu.com/questions/145887/why-no-library-files-installed-for -google-test? answertab = votes # tab-top
Veuillez vous référer à cette réponse, mais à titre de raccourci, je donne également les étapes suivantes:
Sudo apt-get install -y libgtest-dev
Sudo apt-get install -y cmake
cd /usr/src/gtest
Sudo cmake .
Sudo make
Sudo mv libg* /usr/lib/
Après cela, je pourrais construire mon projet qui dépend de gtest
sans aucun problème.
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
Cela installera google test and mock library dans les systèmes Ubuntu/Debian:
Sudo apt-get install google-mock
Testé sur Google Cloud dans une image basée sur Debian.
La méthode suivante évite de manipuler manuellement le répertoire /usr/lib
tout en demandant des modifications minimes dans votre fichier CMakeLists.txt
. Cela permet également à votre gestionnaire de paquets de désinstaller proprement libgtest-dev
.
L’idée est que lorsque vous recevez le package libgtest-dev
via
Sudo apt install libgtest-dev
La source est stockée à 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écessaires
Remplacez simplement FindGTest
par add_subdirectory(/usr/src/googletest gtest)
À la fin, cela devrait ressembler à ceci
add_subdirectory(/usr/src/googletest gtest)
target_link_libraries(your_executable gtest)
Pour 1.8.1 sur la base de 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
qui semblait fonctionner pour 1.8.1, mais Après @ ManuelSchneid3r, cela voudrait dire:
Sudo cp -a googletest/include/gtest /usr/include
Sudo cp -a googlemock/include/gmock /usr/include
Sudo cp `find .|grep .so$` /usr/lib/