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 installflujo 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.gzO 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 . make3. "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 installes 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.0entonces todo esta bien.
gTestframework ahora está listo para usar. Simplemente no olvide vincular su proyecto con la biblioteca estableciendo
-lgtestcomo indicador de vinculador y, opcionalmente, si no escribió su propia rutina principal de prueba, el-lgtest_mainindicador 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 installdestino 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/gtesthasta 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 installAhora, 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 installdeberí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/libPara 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.cppfuente
lgtest_main), no es necesario definir el suyomainen el archivo de prueba.Si está usando CMake, puede usarlo
ExternalProject_Addcomo 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-mocky Google Test (paquete:)libgtest-devse 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/libDespués de eso, puede vincular contra
-lgmock(o en contra-lgmock_mainsi 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/libComo 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-buildpackagePuede 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 totesting :: 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 ldconfigfuente
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-devpara 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
gtestsin problemas.fuente
El siguiente método evita jugar manualmente con el
/usr/libdirectorio y al mismo tiempo requiere un cambio mínimo en suCMakeLists.txtarchivo. También permite que su administrador de paquetes se desinstale limpiamentelibgtest-dev.La idea es que cuando reciba el
libgtest-devpaquete a través deLa fuente se almacena en la ubicación
/usr/src/googletestSimplemente puede apuntar
CMakeLists.txta ese directorio para que pueda encontrar las dependencias necesariasSimplemente reemplace
FindGTestconadd_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 ldconfigfuente
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 . makeLuego hice lo
make installque parecía funcionar para 1.8.1, pero siguiendo a @ ManuelSchneid3r significaría:fuente