96

Debian 不再为 gTest 提供任何预编译的软件包。他们建议您将框架集成到项目的 makefile 中。但我想保持我的 makefile 干净。如何像以前的版本 (<1.6.0) 一样设置 gTest,以便可以链接到库?

4

12 回答 12

153

在开始之前,请确保您已阅读并理解 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. 在您的系统上“安装”头文件和库。

此步骤可能因发行版而异,因此请确保将标头和库复制到正确的目录中。我通过检查Debian 以前的 gtest 库的位置来实现这一点。但我确信有更好的方法来做到这一点。注意:make install很危险,不支持

sudo cp -a googletest/include/gtest /usr/include
sudo cp -a googlemock/gtest/libgtest_main.so googlemock/gtest/libgtest.so /usr/lib/

4.更新链接器的缓存

...并检查 GNU 链接器是否知道库

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为链接器标志来将您的项目与库链接,如果您没有编写自己的测试主程序,则可以选择显式-lgtest_main标志。

从这里开始,您可能想访问 Google的文档,以及有关该框架的旧文档,以了解它是如何工作的。快乐编码!

编辑: 这也适用于 OS X!请参阅“如何在 OS X 上正确设置 googleTest”

于 2012-11-22T13:38:10.923 回答
37

让我专门为 ubuntu 用户回答这个问题。首先安装 gtest 开发包。

sudo apt-get install libgtest-dev

请注意,此软件包仅安装源文件。您必须自己编译代码以创建必要的库文件。这些源文件应位于 /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 的程序,您必须将其链接到:

-lgtest -lgtest_main -lpthread

这在 Ubuntu 14.04LTS 上非常适合我。

于 2017-01-31T09:43:34.473 回答
27

我花了一段时间才弄清楚这一点,因为正常的“make install”已被删除,我不使用 cmake。这里是我的经验分享。在工作中,我在 Linux 上没有 root 访问权限,所以我在我的主目录下安装了 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 
于 2014-01-23T16:33:02.887 回答
10

如果你碰巧在使用 CMake,你可以按照这里ExternalProject_Add的描述使用。

这避免了您必须将 gtest 源代码保留在存储库中,或将其安装在任何地方。它会自动下载并构建在您的构建树中。

于 2012-11-22T13:51:12.027 回答
3

Debian/Ubuntu 更新

Google Mock (package: google-mock) 和 Google Test (package: 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如果您不使用自定义 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

As you can see, the path where the libraries are created has changed. Keep in mind that the new path might be valid for the package repositories soon, too.

Instead of copying the libraries manually, you could use sudo make install. It "currently" works, but be aware that it did not always work in the past. Also, you don't have control over the target location when using this command and you might not want to pollute /usr/lib.

于 2020-03-30T09:41:27.647 回答
1

我同样对这种情况感到不知所措,最终为此制作了自己的 Ubuntu 源代码包。这些源代码包允许您轻松生成二进制包。它们基于本文最新的 gtest 和 gmock 源。

谷歌测试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 ) 这似乎是常见的陷阱。

于 2015-03-26T13:32:23.573 回答
1

以防万一其他人昨天(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
于 2016-06-23T14:30:09.880 回答
1

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

于 2016-12-24T07:09:17.800 回答
1

以下方法避免了手动弄乱/usr/lib目录,同时还需要对文件进行最少的更改CMakeLists.txt。它还可以让您的包管理器干净地卸载libgtest-dev.

这个想法是,当你libgtest-dev通过

sudo apt install libgtest-dev

源存储在位置/usr/src/googletest

您可以简单地将您CMakeLists.txt指向该目录,以便它可以找到必要的依赖项

只需替换FindGTestadd_subdirectory(/usr/src/googletest gtest)

最后,它应该看起来像这样

add_subdirectory(/usr/src/googletest gtest)
target_link_libraries(your_executable gtest)
于 2019-06-28T06:37:41.510 回答
0

这将在基于 Ubuntu/Debian 的系统中安装 google 测试和模拟库:

sudo apt-get install google-mock

在基于 debian 的图像中在谷歌云中测试。

于 2016-11-11T22:42:59.203 回答
0

这将构建并安装 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
于 2017-01-04T10:50:45.690 回答
-1

对于基于@ManuelSchneid3r 的回答的 1.8.1,我必须这样做:

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/
于 2019-02-22T14:44:47.413 回答