O Debian não fornece mais nenhum pacote pré-compilado para o gTest. Eles sugerem que você integre a estrutura no makefile do seu projeto. Mas eu quero manter meu makefile limpo. Como faço para configurar gTest como as versões anteriores (<1.6.0), para que eu possa vincular à biblioteca?
c++
linux
unit-testing
installation
googletest
ManuelSchneid3r
fonte
fonte
./configure && make && make install
fluxo de trabalho padrão deve funcionar bem. Não tenho certeza se isso justifica um post, já que não seria diferente de compilar muitos outros pacotes do código-fonte.Respostas:
Antes de começar, certifique-se de ler e compreender esta nota do Google ! Este tutorial torna o uso do gtest fácil, mas pode apresentar bugs desagradáveis .
1. Obtenha a estrutura googletest
wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz
Ou pegue manualmente . Não vou manter este pequeno manual, então se você topou com ele e os links estão desatualizados, fique à vontade para editá-lo.
2. Descompacte e crie o teste do Google
tar xf release-1.8.0.tar.gz cd googletest-release-1.8.0 cmake -DBUILD_SHARED_LIBS=ON . make
3. "Instale" os cabeçalhos e libs em seu sistema.
Esta etapa pode ser diferente de uma distro para outra, portanto, certifique-se de copiar os cabeçalhos e as bibliotecas no diretório correto. Eu fiz isso verificando onde as bibliotecas gtest anteriores do Debians estavam localizadas. Mas tenho certeza de que existem maneiras melhores de fazer isso. Nota:
make install
é perigoso e não é compatível4. Atualize o cache do vinculador
... e verifique se o GNU Linker conhece as bibliotecas
Se a saída for assim:
libgtest.so.0 -> libgtest.so.0.0.0 libgtest_main.so.0 -> libgtest_main.so.0.0.0
então está tudo bem.
gTestframework agora está pronto para uso. Apenas não se esqueça de vincular seu projeto à biblioteca definindo
-lgtest
como sinalizador de vinculador e, opcionalmente, se você não escreveu sua própria rotina de teste, o-lgtest_main
sinalizador explícito .Daqui em diante, você pode querer ir para a documentação do Googles e os documentos antigos sobre a estrutura para aprender como ela funciona. Boa codificação!
Edit: Isso funciona para OS X também! Consulte "Como configurar corretamente o googleTest no OS X"
fonte
make install
destino que você possa usar em vez de copiar manualmente a biblioteca e os cabeçalhos?'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system.
include/gtest
, tanto quanto posso dizer.sudo cp -a libgtest_main.so libgtest.so /usr/lib/
não funciona mais. O arquivo nem está lá para começar.Deixe-me responder especificamente para usuários do Ubuntu. Comece instalando o pacote de desenvolvimento gtest.
Observe que este pacote instala apenas arquivos de origem. Você mesmo precisa compilar o código para criar os arquivos de biblioteca necessários. Esses arquivos de origem devem estar localizados em / usr / src / gtest. Navegue até esta pasta e use cmake para compilar a biblioteca:
sudo apt-get install cmake # install cmake cd /usr/src/gtest sudo mkdir build cd build sudo cmake .. sudo make sudo make install
Agora, para compilar seus programas que usam gtest, você deve vinculá-lo a:
Isso funcionou perfeitamente para mim no Ubuntu 14.04LTS.
fonte
sudo cp *.a /usr/lib
, apenas repalcá-lo comsudo make install
deve estar bem.Levei um tempo para descobrir isso porque o "make install" normal foi removido e eu não uso o cmake. Aqui está minha experiência para compartilhar. No trabalho, eu não tenho acesso root no Linux, então eu instalei a estrutura de teste Google sob meu diretório home:
~/usr/gtest/
.Para instalar o pacote em ~ / usr / gtest / as bibliotecas compartilhadas, junto com a compilação de amostra também:
$ 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 a instalação, use o seguinte test.c como um exemplo de teste simples:
#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
fonte
lgtest_main
), não há necessidade de definir o seu própriomain
no arquivo de teste.Se você estiver usando o CMake, pode usar
ExternalProject_Add
conforme descrito aqui .Isso evita que você tenha que manter o código-fonte do gtest em seu repositório ou instalá-lo em qualquer lugar. Ele é baixado e construído em sua árvore de construção automaticamente.
fonte
Atualização para Debian / Ubuntu
O Google Mock (pacote:)
google-mock
e o Google Test (pacotelibgtest-dev
:) foram mesclados. O novo pacote é chamadogoogletest
. Ambos os nomes antigos ainda estão disponíveis para compatibilidade com versões anteriores e agora dependem do novo pacotegoogletest
.Portanto, para obter suas bibliotecas do repositório de pacotes, você pode fazer o seguinte:
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
Depois disso, você pode criar um link contra
-lgmock
(ou contra,-lgmock_main
se não usar um método principal personalizado) e-lpthread
. Isso foi suficiente para usar o Google Test em meus casos, pelo menos.Se você deseja a versão mais atual do Google Test, faça o download no github. Depois disso, as etapas são semelhantes:
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 você pode ver, o caminho onde as bibliotecas são criadas mudou. Lembre-se de que o novo caminho também pode ser válido para os repositórios de pacotes em breve.
Em vez de copiar as bibliotecas manualmente, você pode usar
sudo make install
. Ele "atualmente" funciona, mas esteja ciente de que nem sempre funcionou no passado. Além disso, você não tem controle sobre o local de destino ao usar este comando e pode não querer poluir/usr/lib
.fonte
Eu também fiquei impressionado com esta situação e acabei fazendo meus próprios pacotes fonte do Ubuntu para isso. Esses pacotes fonte permitem que você produza facilmente um pacote binário. Eles são baseados na fonte gtest & gmock mais recente a partir desta postagem.
Pacote de origem de DEB de teste do Google
Pacote de origem do Google Mock DEB
Para construir o pacote binário, faça o seguinte:
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
Isso pode lhe dizer que você precisa de alguns pacotes de pré-requisitos, nesse caso você só precisa fazer o apt-get instalá-los. Além disso, os pacotes binários .deb construídos devem estar no diretório pai.
Para GMock, o processo é o mesmo.
Como uma observação lateral, embora não seja específico para meus pacotes de origem, ao vincular gtest ao seu teste de unidade, certifique-se de que gtest seja incluído primeiro ( https://bbs.archlinux.org/viewtopic.php?id=156639 ) Isso parece um peguei comum.
fonte
testing::Message::Message()' test.cpp:(.text+0x84): undefined reference to
testing :: internal :: AssertHelper :: AssertHelper (testing :: TestPartResult :: Type, char const *, int, char const *) 'teste. cpp :(. text + 0x97): referência indefinida para `testing :: internal :: AssertHelper :: operator = (testing :: Message const &) const '... é tão longo que não consigo postar tudo. Fiz isso em uma VM Ubuntu 14.04 totalmente nova, de modo que nada mais foi instalado, exceto as dependências necessárias.#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(); }
Apenas no caso de outra pessoa ficar na mesma situação que eu ontem (2016-06-22) e também não ter sucesso com as abordagens já postadas -
Lubuntu 14.04
funcionou para mim usando a seguinte cadeia 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
fonte
Esta resposta do askubuntu é o que funcionou para mim. Parece mais simples do que outras opções e menos sujeito a erros, pois usa o pacote
libgtest-dev
para obter os códigos- fonte e compilações a partir daí: /ubuntu/145887/why-no-library-files-installed-for-google- test? answersertab = votes # tab-topConsulte essa resposta, mas apenas como um atalho, forneço as etapas aqui também:
Depois disso, pude construir meu projeto que depende
gtest
sem problemas.fonte
O método a seguir evita bagunçar manualmente o
/usr/lib
diretório, ao mesmo tempo em que exige mudanças mínimas em seuCMakeLists.txt
arquivo. Ele também permite que seu gerenciador de pacotes desinstale de forma limpalibgtest-dev
.A ideia é que quando você receber o
libgtest-dev
pacote viaA fonte é armazenada no local
/usr/src/googletest
Você pode simplesmente apontar seu
CMakeLists.txt
para esse diretório para que ele possa encontrar as dependências necessáriasSimplesmente substitua
FindGTest
poradd_subdirectory(/usr/src/googletest gtest)
No final, deve ser assim
fonte
Isso instalará o teste do Google e a biblioteca simulada no sistema baseado em Ubuntu / Debian:
Testado na nuvem do google em imagem baseada em debian.
fonte
googlemock
, mas não instalagoogletest
(gtest). Pelo menos foi o que aconteceu comigo.Isso irá construir e instalar o gtest e o 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
fonte
Para 1.8.1 baseado na resposta de @ ManuelSchneid3r tive que fazer:
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
Então fiz o
make install
que parecia funcionar para 1.8.1, mas seguir @ ManuelSchneid3r significaria:fonte