安装与测试 安装规则相当简单:MathFunctions我们要安装库和头文件,而对于应用程序,我们要安装可执行文件和配置的头文件
安装 安装使用到的命令是install(),在CMakelists的末尾中添加:
1 2 3 install (TARGETS MathFunctions DESTINATION lib)install (FILES MathFunctions.h DESTINATION include )
1 2 3 4 5 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 ()add_test (NAME Runs COMMAND Tutorial 25 )add_test (NAME Usage COMMAND Tutorial)set_tests_properties (Usage PROPERTIES PASS_REGULAR_EXPRESSION "Usage:.*number" )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_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 sec100% tests passed, 0 tests failed out of 9 Total Test time (real) = 0.01 sec