Debian ya no proporciona ningún paquete precompilado para gTest. Sugieren que integre el marco en el archivo MAKE de su proyecto. Pero quiero mantener limpio mi archivo MAKE. ¿Cómo configuro gTest como las versiones anteriores (<1.6.0), para poder vincularme con la biblioteca?
c++
linux
unit-testing
installation
googletest
ManuelSchneid3r
fuente
fuente
./configure && make && make install
flujo de trabajo estándar debería funcionar bien. No estoy seguro de si esto justifica una publicación, ya que no sería diferente de compilar muchos otros paquetes desde la fuente.Respuestas:
Antes de comenzar, asegúrese de haber leído y comprendido esta nota de Google . Este tutorial facilita el uso de gtest, pero puede introducir errores desagradables .
1. Obtenga el marco de Googletest
wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz
O consíguelo a mano . No mantendré este pequeño instructivo, por lo que si lo encontró y los enlaces están desactualizados, no dude en editarlo.
2. Desempaquete y compile la prueba de Google
tar xf release-1.8.0.tar.gz cd googletest-release-1.8.0 cmake -DBUILD_SHARED_LIBS=ON . make
3. "Instale" los encabezados y las bibliotecas en su sistema.
Este paso puede diferir de una distribución a otra, así que asegúrese de copiar los encabezados y las bibliotecas en el directorio correcto. Lo logré comprobando dónde se ubicaban las antiguas librerías gtest de Debians . Pero estoy seguro de que hay mejores formas de hacerlo. Nota:
make install
es peligroso y no es compatible4. Actualiza la caché del vinculador.
... y compruebe si GNU Linker conoce las librerías
Si la salida se ve así:
libgtest.so.0 -> libgtest.so.0.0.0 libgtest_main.so.0 -> libgtest_main.so.0.0.0
entonces todo esta bien.
gTestframework ahora está listo para usar. Simplemente no olvide vincular su proyecto con la biblioteca estableciendo
-lgtest
como indicador de vinculador y, opcionalmente, si no escribió su propia rutina principal de prueba, el-lgtest_main
indicador explícito .A partir de aquí, es posible que desee ir a la documentación de Google y los documentos antiguos sobre el marco para aprender cómo funciona. ¡Feliz codificación!
Editar: ¡ Esto también funciona para OS X! Consulte "Cómo configurar correctamente googleTest en OS X".
fuente
make install
destino que pueda usar en lugar de copiar manualmente la biblioteca y los encabezados?'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system.
include/gtest
hasta donde yo puedo decir.sudo cp -a libgtest_main.so libgtest.so /usr/lib/
ya no funciona. Para empezar, el archivo ni siquiera está ahí.Déjame responder esto específicamente para usuarios de ubuntu. Primero, comience instalando el paquete de desarrollo gtest.
Tenga en cuenta que este paquete solo instala archivos fuente. Debe compilar el código usted mismo para crear los archivos de biblioteca necesarios. Estos archivos fuente deben ubicarse en / usr / src / gtest. Busque esta carpeta y use cmake para compilar la biblioteca:
sudo apt-get install cmake # install cmake cd /usr/src/gtest sudo mkdir build cd build sudo cmake .. sudo make sudo make install
Ahora, para compilar sus programas que usan gtest, debe vincularlo con:
Esto funcionó perfectamente para mí en Ubuntu 14.04LTS.
fuente
sudo cp *.a /usr/lib
, simplemente reemplácelo consudo make install
debería estar bien.Me tomó un tiempo darme cuenta de esto porque el "make install" normal se ha eliminado y no uso cmake. Aquí está mi experiencia para compartir. En el trabajo, no tengo acceso de root en Linux, así que instalé el marco de prueba de Google en mi directorio de inicio:
~/usr/gtest/
.Para instalar el paquete en ~ / usr / gtest / como bibliotecas compartidas, junto con la compilación de muestra también:
$ 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
Para validar la instalación, use el siguiente test.c como un ejemplo de prueba 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(); }
Compilar:
$ 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
fuente
lgtest_main
), no es necesario definir el suyomain
en el archivo de prueba.Si está usando CMake, puede usarlo
ExternalProject_Add
como se describe aquí .Esto le evita tener que mantener el código fuente de gtest en su repositorio o instalarlo en cualquier lugar. Se descarga y se integra en su árbol de compilación automáticamente.
fuente
Actualización para Debian / Ubuntu
Google Mock (paquete:)
google-mock
y Google Test (paquete:)libgtest-dev
se han fusionado. El nuevo paquete se llamagoogletest
. Ambos nombres antiguos todavía están disponibles para compatibilidad con versiones anteriores y ahora dependen del nuevo paquetegoogletest
.Entonces, para obtener sus bibliotecas del repositorio de paquetes, puede hacer lo siguiente:
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
Después de eso, puede vincular contra
-lgmock
(o en contra-lgmock_main
si no usa un método principal personalizado) y-lpthread
. Esto fue suficiente para usar Google Test en mis casos al menos.Si desea la versión más actual de Google Test, descárguela de github. Después de eso, los pasos son similares:
git clone https://github.com/google/googletest cd googletest sudo mkdir build cd build sudo cmake .. sudo make sudo cp lib/*.a /usr/lib
Como puede ver, la ruta donde se crean las bibliotecas ha cambiado. Tenga en cuenta que la nueva ruta también podría ser válida para los repositorios de paquetes pronto.
En lugar de copiar las bibliotecas manualmente, puede usar
sudo make install
. Funciona "actualmente", pero tenga en cuenta que no siempre funcionó en el pasado. Además, no tiene control sobre la ubicación de destino cuando usa este comando y es posible que no desee contaminar/usr/lib
.fuente
De manera similar, esta situación me decepcionó y terminé haciendo mis propios paquetes fuente de Ubuntu para esto. Estos paquetes fuente le permiten producir fácilmente un paquete binario. Se basan en la última fuente de gtest & gmock a partir de esta publicación.
Paquete fuente DEB de prueba de Google
Paquete fuente de Google Mock DEB
Para construir el paquete binario, haga esto:
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
Puede indicarle que necesita algunos paquetes de requisitos previos, en cuyo caso solo necesita apt-get instalarlos. Aparte de eso, los paquetes binarios .deb construidos deberían estar ubicados en el directorio principal.
Para GMock, el proceso es el mismo.
Como nota al margen, aunque no es específico para mis paquetes fuente, cuando vincule gtest a su prueba unitaria, asegúrese de que gtest esté incluido primero ( https://bbs.archlinux.org/viewtopic.php?id=156639 ) Esto parece un gotcha común.
fuente
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): referencia indefinida a `testing :: internal :: AssertHelper :: operator = (testing :: Message const &) const '... es tan largo que no puedo publicar todo. Hice esto en una nueva máquina virtual Ubuntu 14.04, por lo que no se instaló nada más, excepto las dependencias necesarias.#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(); }
En caso de que alguien más se ponga en la misma situación que yo ayer (2016-06-22) y tampoco tenga éxito con los enfoques ya publicados
Lubuntu 14.04
, funcionó para mí usando la siguiente cadena de comandos: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
fuente
Esta respuesta de askubuntu es lo que funcionó para mí. Parece más simple que otras opciones y menos propenso a errores, ya que usa el paquete
libgtest-dev
para obtener las fuentes y compila desde allí: /ubuntu/145887/why-no-library-files-installed-for-google- test? answertab = votes # tab-topConsulte esa respuesta, pero solo como un atajo, proporciono los pasos aquí también:
Después de eso, pude construir mi proyecto que depende
gtest
sin problemas.fuente
El siguiente método evita jugar manualmente con el
/usr/lib
directorio y al mismo tiempo requiere un cambio mínimo en suCMakeLists.txt
archivo. También permite que su administrador de paquetes se desinstale limpiamentelibgtest-dev
.La idea es que cuando reciba el
libgtest-dev
paquete a través deLa fuente se almacena en la ubicación
/usr/src/googletest
Simplemente puede apuntar
CMakeLists.txt
a ese directorio para que pueda encontrar las dependencias necesariasSimplemente reemplace
FindGTest
conadd_subdirectory(/usr/src/googletest gtest)
Al final, debería verse así
fuente
Esto instalará la biblioteca de prueba y simulación de Google en el sistema basado en Ubuntu / Debian:
Probado en la nube de Google en una imagen basada en Debian.
fuente
googlemock
, pero no se instalagoogletest
(gtest). Al menos eso es lo que me pasó.Esto compilará e instalará tanto gtest como 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
fuente
Para 1.8.1 basado en la respuesta de @ ManuelSchneid3r, tuve que hacer:
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
Luego hice lo
make install
que parecía funcionar para 1.8.1, pero siguiendo a @ ManuelSchneid3r significaría:fuente