Debian больше не предоставляет предварительно скомпилированных пакетов для gTest. Они предлагают вам интегрировать фреймворк в make-файл вашего проекта. Но я хочу, чтобы мой make-файл был чистым. Как мне настроить gTest, как предыдущие версии (<1.6.0), чтобы я мог ссылаться на библиотеку?
c++
linux
unit-testing
installation
googletest
ManuelSchneid3r
источник
источник
./configure && make && make install
рабочий процесс должен работать нормально. Я не уверен, что это оправдывает публикацию, поскольку это не будет отличаться от компиляции многих других пакетов из исходников.Ответы:
Прежде чем начать, убедитесь, что вы прочитали и поняли эту заметку от Google ! Это руководство упрощает использование gtest, но может содержать неприятные ошибки .
1. Получите фреймворк googletest.
wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz
Или получить в руки . Я не буду поддерживать это небольшое руководство, поэтому, если вы наткнулись на него, а ссылки устарели, не стесняйтесь редактировать его.
2. Распаковать и собрать google test
tar xf release-1.8.0.tar.gz cd googletest-release-1.8.0 cmake -DBUILD_SHARED_LIBS=ON . make
3. «Установите» заголовки и библиотеки в вашу систему.
Этот шаг может отличаться от дистрибутива к дистрибутиву, поэтому убедитесь, что вы скопировали заголовки и библиотеки в правильный каталог. Я добился этого, проверив, где находились бывшие gtest-библиотеки Debians . Но я уверен, что есть способы сделать это лучше. Примечание:
make install
опасно и не поддерживается4. Обновите кеш компоновщика.
... и проверьте, знает ли GNU Linker библиотеки
Если результат выглядит так:
libgtest.so.0 -> libgtest.so.0.0.0 libgtest_main.so.0 -> libgtest_main.so.0.0.0
то все в порядке.
gTestframework теперь готов к использованию. Просто не забудьте связать свой проект с библиотекой, установив
-lgtest
флаг компоновщика и, при желании, если вы не писали свою собственную тестовую mainroutine, явный-lgtest_main
флаг.Отсюда вы можете перейти к документации Googles и старым документам о фреймворке, чтобы узнать, как он работает. Удачного кодирования!
Изменить: это работает и для OS X! См. «Как правильно настроить googleTest на OS X».
источник
make install
цели, которую вы могли бы использовать вместо ручного копирования библиотеки и заголовков?'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system.
include/gtest
, насколько я могу судить.sudo cp -a libgtest_main.so libgtest.so /usr/lib/
больше не работает. Файла даже там нет.Позвольте мне ответить на этот вопрос специально для пользователей Ubuntu. Сначала начните с установки пакета разработки gtest.
Обратите внимание, что этот пакет устанавливает только исходные файлы. Вы должны сами скомпилировать код, чтобы создать необходимые файлы библиотеки. Эти исходные файлы должны находиться в / usr / src / gtest. Перейдите в эту папку и используйте cmake для компиляции библиотеки:
sudo apt-get install cmake # install cmake cd /usr/src/gtest sudo mkdir build cd build sudo cmake .. sudo make sudo make install
Теперь, чтобы скомпилировать ваши программы, использующие gtest, вы должны связать его с:
У меня это отлично сработало на Ubuntu 14.04LTS.
источник
sudo cp *.a /usr/lib
, просто замените это с помощьюsudo make install
.Мне потребовалось время, чтобы понять это, потому что обычная команда make install была удалена, и я не использую cmake. Вот мой опыт, которым я хочу поделиться. На работе у меня нет доступа к корневой на Linux, так что я установил рамки тест Google под моей домашней директории:
~/usr/gtest/
.Чтобы установить пакет в ~ / usr / gtest / как общие библиотеки вместе с образцом сборки:
$ 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
Чтобы проверить установку, используйте следующий test.c в качестве простого тестового примера:
#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(); }
Компилировать:
$ 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
источник
lgtest_main
) нет необходимости определять свою собственнуюmain
в тестовом файле.Если вы используете CMake, вы можете использовать,
ExternalProject_Add
как описано здесь .Это избавляет вас от необходимости хранить исходный код gtest в вашем репозитории или устанавливать его где угодно. Он автоматически загружается и встраивается в ваше дерево сборки.
источник
Обновление для Debian / Ubuntu
Google Mock (пакет:)
google-mock
и Google Test (пакетlibgtest-dev
:) были объединены. Новый пакет называетсяgoogletest
. Оба старых имени по-прежнему доступны для обратной совместимости и теперь зависят от нового пакетаgoogletest
.Итак, чтобы получить свои библиотеки из репозитория пакетов, вы можете сделать следующее:
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
После этого вы можете ссылаться на
-lgmock
(или против,-lgmock_main
если вы не используете настраиваемый основной метод) и-lpthread
. По крайней мере, в моих случаях этого было достаточно для использования Google Test.Если вам нужна самая последняя версия Google Test, скачайте ее с github. После этого действия аналогичны:
git clone https://github.com/google/googletest cd googletest sudo mkdir build cd build sudo cmake .. sudo make sudo cp lib/*.a /usr/lib
Как видите, путь создания библиотек изменился. Имейте в виду, что новый путь может скоро стать действительным и для репозиториев пакетов.
Вместо того, чтобы копировать библиотеки вручную, вы можете использовать
sudo make install
. Он работает «в настоящее время», но имейте в виду, что в прошлом он не всегда работал. Кроме того, при использовании этой команды у вас нет контроля над целевым местоположением, и вы, возможно, не захотите загрязнять/usr/lib
.источник
Я был так же разочарован этой ситуацией и в итоге создал для этого свои собственные пакеты с исходным кодом Ubuntu. Эти пакеты с исходным кодом позволяют легко создавать двоичный пакет. Они основаны на последних исходниках gtest и gmock, опубликованных в этой публикации.
Пакет исходного кода Google Test DEB
Пакет исходного кода Google Mock DEB
Чтобы собрать двоичный пакет, сделайте следующее:
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
Он может сказать вам, что вам нужны некоторые предварительные пакеты, и в этом случае вам просто нужно установить их apt-get. Кроме того, собранные двоичные пакеты .deb должны находиться в родительском каталоге.
Для GMock процесс такой же.
В качестве побочного примечания, хотя это и не относится к моим исходным пакетам, при связывании gtest с вашим модульным тестом убедитесь, что gtest включен первым ( https://bbs.archlinux.org/viewtopic.php?id=156639 ). Это похоже на общие ошибки.
источник
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): undefined ссылка на `testing :: internal :: AssertHelper :: operator = (testing :: Message const &) const '... это так долго, что я не могу опубликовать всю вещь. Я сделал это на новой виртуальной машине Ubuntu 14.04, поэтому ничего не было установлено, кроме необходимых зависимостей.#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(); }
На всякий случай, если кто-то еще попадает в такую же ситуацию, как я вчера (2016-06-22), и также не преуспевает с уже опубликованными подходами -
Lubuntu 14.04
у меня это сработало, используя следующую цепочку команд: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
источник
Этот ответ от askubuntu сработал для меня. Кажется проще, чем другие варианты, и менее подвержен ошибкам, поскольку он использует package
libgtest-dev
для получения исходных кодов и сборок оттуда: /ubuntu/145887/why-no-library-files-installed-for-google- test? answertab = голосов # tab-topПожалуйста, обратитесь к этому ответу, но в качестве ярлыка я также предлагаю шаги здесь:
После этого я мог построить свой проект, от которого
gtest
не было проблем.источник
Следующий метод позволяет избежать ручной работы с
/usr/lib
каталогом, а также требует минимального изменения в вашемCMakeLists.txt
файле. Это также позволяет вашему диспетчеру пакетов полностью удалитьlibgtest-dev
.Идея в том, что когда вы получаете
libgtest-dev
посылку черезИсточник хранится в локации
/usr/src/googletest
Вы можете просто указать свой
CMakeLists.txt
каталог, чтобы найти необходимые зависимости.Просто замените
FindGTest
наadd_subdirectory(/usr/src/googletest gtest)
В итоге должно получиться так
источник
Это установит тестовую и фиктивную библиотеку Google в системе на основе Ubuntu / Debian:
Протестировано в облаке Google в образе на основе Debian.
источник
googlemock
, а не устанавливаетgoogletest
(gtest). По крайней мере, так случилось со мной.Это соберет и установит как gtest, так и 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
источник
Для 1.8.1 на основе ответа @ ManuelSchneid3r мне пришлось сделать:
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
Затем я сделал,
make install
что, казалось, работает для 1.8.1, но после @ ManuelSchneid3r это будет означать:источник