恐怕这是一个基本的问题,我可能在其他IDE中找到了答案,但没有找到CodeBlocks =(
我试着使用GoogleTest。我下载了这个项目,用cmake -G "CodeBlocks - Unix“构建了它(我在Ubuntu上)
这给了我在/usr/lib中传输的libgtest.a和libgtest_main.a文件。
我认为我的不足还在最后一步:链接GoogleTest和CodeBlocks。一些教程告诉我要添加"-lgtest“链接器选项,我尝试了很多事情,但这都是一样的:当我试图编译我的#include "gtest/gtest.h”时,返回致命的错误"No这类文件或目录“。
你能帮助我可怜的灵魂吗?
发布于 2016-07-12 13:52:39
不要把你自己构建的文件放在/usr/...下,除非你把它们放在/usr/local/...下。/usr/...的其余部分由您的Linux发行版保留,并且应该由您的包管理器专门填充。如果你在包经理背后乱七八糟,你就有可能破坏你的包,陷入任何痛苦之中。
首先从libgtest.a和libgtest_main.a中删除/usr/lib。
您已经下载了googletest并在某个目录中构建了它,方法是首先在该目录中运行CMake,然后运行make。
这样做之后,在运行make的同一个目录中运行:
sudo make install这将在gmock / gtest库中安装/usr/local/lib。它将在gmock中安装/usr/local/include/gmock头文件,并在/usr/local/include/gtest中安装gtest头文件。去那里检查一下。
/usr/local/...属于您,无论您做什么,都不会干扰包管理器。
接下来,要在单元测试程序中使用googletest,您可能需要做以下6件事情:
1:适用于源文件的 #include <gtest/gtest.h>。(注:<gtest/gtest.h>,没有什么不同)。
2:告诉编译器什么目录包含gtest/gtest.h,除非它是编译器的默认搜索目录之一。为此,您需要将编译源文件的选项-I/usr/local/include传递给g++。但是您不需要这样做,因为/usr/local/include是编译器的默认搜索目录之一。
3:告诉链接器您想链接libgtest.a。要做到这一点,您可以将选项-lgtest传递给g++以链接程序。
4:告诉链接器什么目录包含libgest.a,除非它是链接器的默认搜索目录之一。要做到这一点,您可以将选项-L/usr/local/lib传递给g++来链接程序。但是您不需要这样做,因为/usr/local/lib是链接器的默认搜索目录之一。
5:告诉编译器生成线程安全的代码.(为什么?因为默认情况下,libgest是一个多线程库.如果你想要的话,你可以单线程构建它,但我想你没有。)为此,将编译源文件的选项-pthread传递给g++。
6:告诉链接器链接多线程可执行文件.要做到这一点,您可以将选项-pthread传递给g++以链接程序。(是的,-pthread用于编译,-pthread再次用于链接)。
所以在实践中,您只需要执行1、3、5和6。
1不需要进一步解释。其余部分要求您正确设置代码::块项目构建选项,以便它们生成用于编译和链接的正确的g++ ...命令。
看起来好像3已经正确了:在构建选项中. -> 链接器设置 -> 其他链接器选项添加行:-lgtest
对于5,在构建选项中. -> 编译器设置 -> 其他编译器选项中添加一行:-pthread
对于6,在构建选项. -> Linker设置 -> 其他链接器选项中,在具有-lgtest的链接器选项之后添加另一行:-pthread。
就这样。当您保存了这些设置之后,就可以构建项目了。如果有错误,youi可以查看Build log选项卡(而不是Build messages选项卡)下的构建日志,以确切地查看为编译和链接执行了哪些g++ ...命令,以及您的设置是否为g++生成了正确的命令行选项。
https://stackoverflow.com/questions/38324589
复制相似问题