安装与测试

安装与测试

安装规则相当简单:MathFunctions我们要安装库和头文件,而对于应用程序,我们要安装可执行文件和配置的头文件

安装

安装使用到的命令是install(),在CMakelists的末尾中添加:

1
2
3
# MathFunctions/CMakeLists
install(TARGETS MathFunctions DESTINATION lib)
install(FILES MathFunctions.h DESTINATION include)
1
2
3
4
5
# CMakeLists
install(TARGETS Tutorial DESTINATION bin)
install(FILES "${PROJECT_BINARY_DIR}/config.h"
DESTINATION include
)

添加以后在执行cmake和make以后,需要执行安装命令:

1
2
3
4
5
6
7
8
9
$ sudo make install
[ 50%] Built target MathFunctions
[100%] Built target Tutorial
Install the project...
-- Install configuration: ""
-- Installing: /usr/local/bin/Tutorial
-- Installing: /usr/local/include/config.h
-- Installing: /usr/local/lib/libMathFunctions.a
-- Installing: /usr/local/include/MathFunctions.h

安装路径默认为/usr/local/ ,如果想要自定义安装路径的话需要在cmake时进行配置:

1
2
3
4
5
6
7
8
9
10
11
$ cmake .. -DCMAKE_INSTALL_PREFIX="/home/carl/installdir"
$ make
$ sudo make install
[ 50%] Built target MathFunctions
[100%] Built target Tutorial
Install the project...
-- Install configuration: ""
-- Up-to-date: /home/carl/installdir/bin/Tutorial
-- Up-to-date: /home/carl/installdir/include/config.h
-- Up-to-date: /home/carl/installdir/lib/libMathFunctions.a
-- Up-to-date: /home/carl/installdir/include/MathFunctions.h

在install()中,可执行文件,库,头文件等都可以使用TARGETS,FILES多用于一些配置文件,脚本等

测试

测试要使用ctest工具,按照官方文档在顶层CMakelists末尾中添加如下信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
enable_testing()

# does the application run
add_test(NAME Runs COMMAND Tutorial 25)

# does the usage message work?
add_test(NAME Usage COMMAND Tutorial)
set_tests_properties(Usage
PROPERTIES PASS_REGULAR_EXPRESSION "Usage:.*number"
)

# define a function to simplify adding tests
function(do_test target arg result)
add_test(NAME Comp${arg} COMMAND ${target} ${arg})
set_tests_properties(Comp${arg}
PROPERTIES PASS_REGULAR_EXPRESSION ${result}
)
endfunction(do_test)

# do a bunch of result based tests
do_test(Tutorial 4 "4 is 2")
do_test(Tutorial 9 "9 is 3")
do_test(Tutorial 5 "5 is 2.236")
do_test(Tutorial 7 "7 is 2.645")
do_test(Tutorial 25 "25 is 5")
do_test(Tutorial -25 "-25 is [-nan|nan|0]")
do_test(Tutorial 0.0001 "0.0001 is 0.01")

enable_testing():使用ctest模块

add_test():增加一个测试,函数原型为add_test(<name> <command> [<arg>…]),分别是测试名称,可执行文件名称,参数

set_tests_properties():为add_test()设置属性,原型为set_tests_properties(test1 [test2…] PROPERTIES prop1 value1 prop2 value2)

PROPERTIES 包括有WILL_FAIL、PASS_REGULAR_EXPRESSION、FAIL_REGULAR_EXPRESSION。代码中用到的是PASS_REGULAR_EXPRESSION,如果设置了这个属性,测试输出将根据指定的正则表达式进行检查,并且至少有一个正则表达式必须匹配,否则测试失败

为了简化操作,定义了一个名为do_test的函数,函数的功能就是对结果进行检测,看是否符合期望

重新构建项目,并到可执行文件下执行ctest,结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ ctest
Test project /home/carl/test/cmake/build
Start 1: Runs
1/9 Test #1: Runs ............................. Passed 0.00 sec
Start 2: Usage
2/9 Test #2: Usage ............................ Passed 0.00 sec
Start 3: Comp4
3/9 Test #3: Comp4 ............................ Passed 0.00 sec
Start 4: Comp9
4/9 Test #4: Comp9 ............................ Passed 0.00 sec
Start 5: Comp5
5/9 Test #5: Comp5 ............................ Passed 0.00 sec
Start 6: Comp7
6/9 Test #6: Comp7 ............................ Passed 0.00 sec
Start 7: Comp25
7/9 Test #7: Comp25 ........................... Passed 0.00 sec
Start 8: Comp-25
8/9 Test #8: Comp-25 .......................... Passed 0.00 sec
Start 9: Comp0.0001
9/9 Test #9: Comp0.0001 ....................... Passed 0.00 sec

100% tests passed, 0 tests failed out of 9

Total Test time (real) = 0.01 sec

安装与测试
https://carl-5535.github.io/2021/08/11/CMake/安装与测试/
作者
Carl Chen
发布于
2021年8月11日
许可协议