CMake & googletest
Install CMake
https://cmake.org/install/
https://www.cnblogs.com/yanqingyang/p/12731855.html
升级gcc/g++
https://blog.csdn.net/gatieme/article/details/52871438
后面编译googletest的时候报错,检查发现是gcc版本只有4.8,无法支持一些c++11特性。
CMake Basics
https://github.com/ttroy50/cmake-examples/tree/master/01-basic
cmake主要就是一个CMakeLists.txt
文件。这个文件是由一个个函数组成的。例如下面的基本文件:
cmake_minimum_required(VERSION 2.6)
project (hello_cmake)
add_executable(${PROJECT_NAME} main.cpp)
${PROJECT_NAME}
类似于“变量”。这里会自动赋值到project名,也就是hello_cmake
。
可以用set()
函数来为变量赋值。有些变量相当于系统属性,比如
set(CMAKE_CXX_STANDARD 11)
就会把C++ standard设成11。
函数参数的顺序是有规律的。一般来说是输出在前,输入在后。比如说:
add_executable(
hello_test
hello_test.cc
)
就是从hello_test.cc编译出hello_test。
插一嘴:常见错误
当我想编译多个test时,写成了:
add_executable(
hello_test
fact_test
hello_test.cc
fact_test.cc
)
这显然就不合函数逻辑:我怎么知道哪个源文件编译到哪个输出呢?
所以符合逻辑的代码如下:
add_executable(
hello_test
hello_test.cc
)
add_executable(
fact_test
fact_test.cc
)
样例分析:googletest示例中的CMakeFiles.txt
https://github.com/yuhengfdada/gtest-practice/blob/master/CMakeLists.txt
include()
enable_testing()
add_executable()
target_link_libraries()
googletest
https://google.github.io/googletest/quickstart-cmake.html
https://google.github.io/googletest/primer.html
定义格式:
TEST(TestSuiteName, TestName) {
... test body ...
}
test statement有ASSERT_*
和 EXPECT_*
两种。这两个的区别是assert fail会直接terminate,但是expect不会。所以推荐用expect。
然后。嗯。就没什么了其实。大多设置就还是在CMake里面。