最近逐渐把开发环境从Windows转到Linux下,原因是Visual Studio提供的环境太庞大,总感觉看不到全貌,并且对于C++11的支持实在是太慢了。而在Linux下,有非常大的选择空间,编辑器可以选vim或者emacs,两者都是顶级的文本编辑器(不仅仅是文本编辑器)。编译器可以选g++或者clang,两者对于C++11的支持已经几乎完整了。另外还有各种优秀的工具可以选择,可以用autotools或者cmake来build工程,用gdb进行调试,用cppcheck做静态类型检查(也可以配置到VS中),用valgrind对程序进行动态分析。这就是Linux的好处,各种优秀的工具随你组合,VS是个巨无霸,感觉程序员的创造力受到了限制。
这两天把VS上的工程全部移植到Linux上,全部用g++配合makefile进行编译,因为代码规模不是特别大,所以makefile是直接手写的。移植的过程中,一些第三方的库要配置,包括Goolge Test(Google的C++测试框架)、TBB(Intel的C++多线程库)、OpenMP(开放标准的并行程序指导性注释)和OpenCV(一个跨平台的计算机视觉库)。所以把配置的过程记录下来,方便以后查阅,也希望能够给大家提供一些参考。
一、配置Google Test
现在gtest的最新版本是1.6.0,按以下步骤下载和安装:
wget https://googletest.googlecode.com/files/gtest-1.6.0.zip
unzip gtest-1.6.0.zipcd gtest-1.6.0g++ -I./include -I./ -c ./src/gtest-all.cc
ar -rv libgtest.a gtest-all.o
注意:这边其实就是产生了libgtest.a文件,以后需要用的时候,就把这个静态库拷贝到对应的工程下,链接的时候加上它就可以了,如:
g++ –o target source1.o source2.o libgtest.a
另外,把gtest-1.6.0下面的include/gtest目录拷贝到全局头文件目录,如:
cp -r include/gtest/ /usr/local/include/
在用到gtest的文件中,用#include 指令就可以让编译器找到gtest的头文件了。
比如我写了一个比较几个常用排序的算法的测试:
#include //引入gtest头文件
#include"QuickSort.h"#include"InsertionSort.h"#include"HeapSort.h"
using namespaceCodeMood;
TEST(SortingTest, insertion_sort)//用TEST宏定义一个测试用例,括号里的两个参数起标识作用
{
vector vec =generate_random();
TIME_STD(test_sorting(insertion_sort, vec));
EXPECT_TRUE(is_sorted(begin(vec), end(vec)));//待验证的性质
}
TEST(SortingTest, heap_sort)
{
vector vec = generate_random(1);
TIME_STD(test_sorting(heap_sort, vec));
EXPECT_TRUE(is_sorted(begin(vec), end(vec)));
}
TEST(SortingTest, quick_sort)
{
vector vec =generate_random();
TIME_STD(test_sorting(quick_sort, vec));
EXPECT_TRUE(is_sorted(begin(vec), end(vec)));
}
TEST(SortingTest, std_sort)
{
vector vec =generate_random();
TIME_STD(std::sort(begin(vec), end(vec)));
EXPECT_TRUE(is_sorted(begin(vec), end(vec)));
}int main(int argc, char*argv[])
{
::testing::InitGoogleTest(&argc, argv); //初始化gtest
return RUN_ALL_TESTS(); //运行所有测试用例
}
用法很简单,从上面的例子应该就知道怎么用了,这边不具体说明用法,