Googletest (gtest)似乎是一个非常受欢迎的单元测试框架,我想学习如何在g++编译器上简单轻松地独立构建它,这样我就可以用它测试小型库和一次性文件。
我已经阅读了官方文档和自述文件:
- https://github.com/google/googletest
1.这里是:https://github.com/google/googletest/tree/main/googletest
......但我还是想不明白。
如何使用gcc/g编译器或与g兼容的LLVM clang编译器通过gtest进行构建和测试?
我知道我可以做以下事情来使用cmake,但是它没有给予我想要的粒度控制级别,而且它仍然没有回答“完成后我如何使用这些.a静态库文件?"的神秘问题。
来自:https://github.com/google/googletest/tree/main/googletest#generic-build-instructions
git clone https://github.com/google/googletest.git
cd googletest # Main directory of the cloned repository.
mkdir build # Create a directory to hold the build output.
cd build
time cmake .. # Generate native make build scripts for GoogleTest.
time make # Run those makefiles just autogenerated by cmake above.
现在,您将使用cmake文件中预先指定的构建设置构建以下4个库文件,但我仍然不知道如何使用它们:
googletest/build/lib/libgmock.a
googletest/build/lib/libgmock_main.a
googletest/build/lib/libgtest.a
googletest/build/lib/libgtest_main.a
2条答案
按热度按时间vyu0f0g11#
一年后我的全新答案,请看这里:The "easy" way: install gtest's headers and .a static library files system-wide into
/usr/local/include
and/usr/local/lib
, respectively“硬”方法:直接使用
g++
,out 构建系统,从头开始手动构建所有内容我终于想通了!关键的参考资料是这一篇,里面有一些我研究过的优秀的构建命令示例来弄清楚这一切:https://ethz-adrl.github.io/ct/ct_core/doc/html/md__home_adrl_code_src_control-toolbox_ct_core_build_test_googletest-src_googletest_README.html
步骤如下:
在Linux Ubuntu上测试。
我首先在我的eRCaGuy_hello_world repo主C++自述文件中记录了这整个过程以及更多内容,如下所示:cpp/README.md .
1.将所有gtest和gmock构建为静态库归档
*.a
文件您现在拥有:
2.构建并运行googletest附带的一些示例
请在此处查看这些示例测试:https://github.com/google/googletest/tree/main/googletest/samples .
1.对于
googletest/googletest/samples/sample1_unittest.cc
:1.对于
googletest/googletest/samples/sample2_unittest.cc
:等等。
上面构建
sample1_unittest.cc
的示例构建和运行命令及输出:注解
1.问:为什么在构建googletest库时需要include dir
-I"googletest/googletest"
?1.答:因为
googletest/googletest/src/gtest-all.cc
包含所有其他源文件src/name_of_file.cc
,这里:这https://github.com/google/googletest/blob/main/googletest/src/gtest-all.cc#L41-L49意味着包含src
目录的父目录必须是一个“包含文件夹”。该父目录是googletest/googletest
,因此我们用-I"googletest/googletest"
将其标记为包含目录。1.你也可以用gtest测试C代码,当在C中包含C头文件时使用
extern "C" { }
技巧来防止名称损坏,然后链接到C构建的对象*.o
文件,同时在C googletest单元测试中包含非名称损坏的头文件。快乐构建!现在我/我们终于可以在我们自己的个人项目中轻松使用gtest了!
其他参考文献:
1.我自己的答案,我计算出了
time
cmd Package 器的事情,以计时一个更大的多行命令的子组件,以及整个多行命令:How to run time on multiple commands AND write the time output to file?xuo3flqw2#
简单的方法:分别在
/usr/local/include
和/usr/local/lib
中安装gtest的头文件和.a静态库文件又经过了一年的努力,总共花了5年时间,我终于找到了“简单”的方法。
我最初只是想知道运行什么
g++
命令来构建我自己的单元测试文件。1.将gtest和gmock作为静态的
.a
共享库安装在/usr/local/lib/
中,并将它们的头文件安装到/usr/local/include/
中。1.根据需要使用直接传递给
g++
的-pthread
、-lgtest
、-lgtest_main
、-lgmock
和-lgmock_main
链接器标志。示例:
要了解吨更多细节、更长的解释和更多信息,请参阅我的完整答案:快!
有关
-l
标志的更多信息,另请参见我的其他回答:Meaning of-l
(lowercase "L") flags in gcc/g++