Debian больше не предоставляет никаких предварительно скомпилированных пакетов для gTest. Они предлагают вам интегрировать фреймворк в ваш проектный файл. Но я хочу сохранить мой make файл в чистоте. Как настроить gTest, как в предыдущих версиях (<1.6.0), чтобы я мог связываться с библиотекой?
Как настроить googleTest в качестве общей библиотеки в Linux
Ответ 1
Прежде чем начать, убедитесь, что вы прочитали и поняли эта заметка от Google! Этот учебник позволяет использовать gtest легко, но может содержать неприятные ошибки.
1. Получить раму googletest
wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz
Или получить его . Я не буду поддерживать этот маленький How-to, поэтому, если вы наткнулись на него и ссылки устарели, не стесняйтесь его редактировать.
2. Распаковать и построить тест Google
tar xf release-1.8.0.tar.gz
cd googletest-release-1.8.0
cmake -DBUILD_SHARED_LIBS=ON .
make
3. "Установите" заголовки и библиотеки в вашей системе.
Этот шаг может отличаться от distro to distro, поэтому убедитесь, что вы скопировали заголовки и библиотеки в правильном каталоге. Я сделал это, проверив, где были найдены Debians прежние gtest libs. Но я уверен, что есть лучшие способы сделать это. Примечание: make install
является опасным и не поддерживается
$ sudo cp -a include/gtest /usr/include
$ sudo cp -a libgtest_main.so libgtest.so /usr/lib/
4. Обновите кеш компоновщика
... и проверьте, знает ли GNU Linker libs
$ sudo ldconfig -v | grep gtest
Если вывод выглядит следующим образом:
libgtest.so.0 -> libgtest.so.0.0.0
libgtest_main.so.0 -> libgtest_main.so.0.0.0
все в порядке.
gTestframework теперь готов к использованию. Просто не забудьте связать свой проект с библиотекой, установив -lgtest
в качестве флага компоновщика и, при желании, если вы не создали собственный тестовый mainroutine, явный флаг -lgtest_main
.
Здесь вы можете пойти в Googles documentation о структуре, чтобы узнать, как она работает. Счастливое кодирование!
Edit: Это работает и для OS X! См. "Как правильно настроить googleTest на OS X"
Ответ 2
Позвольте мне ответить на это специально для пользователей ubuntu. Сначала начните с установки самого безопасного пакета разработки.
sudo apt-get install libgtest-dev
Обратите внимание, что этот пакет устанавливает только исходные файлы. Вы должны сами составить код для создания необходимых файлов библиотеки. Эти исходные файлы должны быть расположены в /usr/src/gtest. Перейдите в эту папку и используйте cmake для компиляции библиотеки:
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
Теперь, чтобы скомпилировать ваши программы, которые используют gtest, вам необходимо связать их с:
-lgtest -lgtest_main
Это отлично сработало для меня на Ubuntu 14.04LTS.
Ответ 3
Мне потребовалось некоторое время, чтобы понять это, потому что нормальная "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
Ответ 4
Если вы используете CMake, вы можете использовать ExternalProject_Add
, как описано здесь.
Это позволяет избежать сохранения исходного кода в вашем репозитории или его установки в любом месте. Он автоматически загружается и создается в вашем дереве сборки.
Ответ 5
Я был так же потрясен этой ситуацией и в итоге создал для меня собственные исходные пакеты Ubuntu. Эти исходные пакеты позволяют легко создавать двоичный пакет. Они основаны на последнем файле gtest и gmock на этом посту.
Пакет исходных файлов DEB для Google
Исходный пакет 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 к вашему unit test, убедитесь, что первый параметр включен (https://bbs.archlinux.org/viewtopic.php?id=156639) Это похоже на обычную игру.
Ответ 6
На всякий случай кто-то другой попадает в ту же ситуацию, что и я вчера (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
Ответ 7
Этот ответ от askubuntu - это то, что сработало для меня. Кажется проще, чем другие варианты, менее подверженные ошибкам, поскольку он использует пакет libgtest-dev
для получения источников и сборки оттуда: https://askubuntu.com/questions/145887/why-no-library-files-installed-for-google-test?answertab=votes#tab-top
Пожалуйста, обратитесь к этому ответу, но, как ярлык, я также предлагаю следующие шаги:
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/
После этого я мог бы построить свой проект, который зависит от gtest
без проблем.
Ответ 8
В системе Ubuntu/Debian будет установлена тестовая и текстовая библиотека google.
sudo apt-get install google-mock
Протестировано в облаке Google в образовании на основе debian.
Ответ 9
Это создаст и установит как 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
Ответ 10
Следующий метод позволяет избежать ручного связывания с каталогом /usr/lib
а также требует минимальных изменений в файле CMakeLists.txt
. Это также позволяет вашему менеджеру пакетов без libgtest-dev
удалить libgtest-dev
.
Идея состоит в том, что когда вы получаете пакет libgtest-dev
через
sudo apt install libgtest-dev
Источник хранится в папке /usr/src/googletest
Вы можете просто указать свой CMakeLists.txt
на этот каталог, чтобы он мог найти необходимые зависимости
Просто замените FindGTest
на add_subdirectory(/usr/src/googletest gtest)
В конце все должно выглядеть так
add_subdirectory(/usr/src/googletest gtest)
target_link_libraries(your_executable gtest)
Ответ 11
Для 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 это означало бы:
sudo cp -a googletest/include/gtest /usr/include
sudo cp -a googlemock/include/gmock /usr/include
sudo cp 'find .|grep .so$' /usr/lib/