三. 安装与测试
这一步骤中,我们将为项目添加安装规则和测试支持。 安装规则非常简单。 对于MathFunctions库,我们通过将以下两行添加到MathFunctions的CMakeLists.txt文件来设置库和要安装的头文件:
install (TARGETS MathFunctions DESTINATION bin)
install (FILES MathFunctions.h DESTINATION include)
对于应用程序,将以下行添加到顶级CMakeLists.txt文件以安装可执行文件和头文件:
# add the install targets
install (TARGETS Tutorial DESTINATION bin)
install (FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h"
DESTINATION include)
此时,您应该能够编译工程,然后键入make install(或从IDE构建INSTALL目标),它将安装相应的头文件,库和可执行文件。 CMake变量CMAKE_INSTALL_PREFIX用于确定文件的安装位置。
添加测试也是一个相当简单的过程。 在顶级CMakeLists.txt文件的末尾,我们可以添加许多基本测试来验证应用程序是否正常工作。
include(CTest)
# does the application run
add_test (TutorialRuns Tutorial 25)
# does it sqrt of 25
add_test (TutorialComp25 Tutorial 25)
set_tests_properties (TutorialComp25 PROPERTIES PASS_REGULAR_EXPRESSION "25 is 5")
# does it handle negative numbers
add_test (TutorialNegative Tutorial -25)
set_tests_properties (TutorialNegative PROPERTIES PASS_REGULAR_EXPRESSION "-25 is 0")
# does it handle small numbers
add_test (TutorialSmall Tutorial 0.0001)
set_tests_properties (TutorialSmall PROPERTIES PASS_REGULAR_EXPRESSION "0.0001 is 0.01")
# does the usage message work?
add_test (TutorialUsage Tutorial)
set_tests_properties (TutorialUsage PROPERTIES PASS_REGULAR_EXPRESSION "Usage:.*number")
构建完成后,可以运行“ctest”命令行工具来运行测试。 第一个测试只是验证应用程序运行,不会发生段错误或以其他方式崩溃,并且返回值为零。 这是CTest测试的基本形式。 接下来的几个测试都使用PASS_REGULAR_EXPRESSION测试属性来验证测试的输出是否包含某些字符串。 在这种情况下,验证计算出的平方根是应该是什么,并在提供不正确数量的参数时打印使用消息。 如果要添加大量测试来测试不同的输入值,可以考虑创建如下的宏:
#define a macro to simplify adding tests, then use it
macro (do_test arg result)
add_test (TutorialComp${arg} Tutorial ${arg})
set_tests_properties (TutorialComp${arg}
PROPERTIES PASS_REGULAR_EXPRESSION ${result})
endmacro (do_test)
# do a bunch of result based tests
do_test (25 "25 is 5")
do_test (-25 "-25 is 0")
对于do_test的每次调用,将根据传递的参数向项目添加另一个测试,其中包含名称,输入和结果。