注:
现在我们将开始向项目中添加安装规则和测试支持.
注: 接触过开源项目的同学,可能知道, 很多开源项目源码都是使用make 工具进行编译和安装的, 使用make 进行编译, make install 进行安装. CMake 也是类似的.
设置安装规则
安装规则相当简单:对于MathFunctions ,我们希望安装库文件和头文件,而对于应用程序,我们希望安装可执行文件和可配置的头文件.
- 在
MathFunctions/CMakeLists.txt 的末尾添加:
# 将`libMathFunctions.a`放到`lib`目录
install(TARGETS MathFunctions DESTINATION lib)
# 将`MathFunctions.h`放到`include`目录
install(FILES MathFunctions.h DESTINATION include)
# 将应用程序放到`bin`目录
install(TARGETS Tutorial DESTINATION bin)
# 将`TutorialConfig.h`放到`include`目录
install(FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h"
DESTINATION include
)
在本地安装
- 打开
命令托盘(Ctrl + Shift + P) , 输入: “cme”, 选择: “CMake: Edit CMake Cache(UI)” - 在搜索框中输入: "install"完成筛选.
- 将
CMAKE_INSTALL_PREFIX 的值修改为C:/tutorial ,或其他不需要管理员权限的目录. - 点击"保存"
- 点击状态栏上的
Build 按钮, 重新构建. - 点击状态栏上
Build 按钮右侧的构建目标 , 切换构建目标为"install". - 再次点击状态栏上的
Build 按钮, 完成安装. CMake 将安装文件拷贝到CMAKE_INSTALL_PREFIX 指定的目录下. - 现在你可以通过命令行窗口(cmd), 执行
tutorial.exe 程序了.
测试支持
接下来,让我们测试应用程序. 在顶层CMakeLists.txt 文件的末尾,我们可以启用测试,然后添加一些基本测试,以验证应用程序是否正常工作(如果是使用vscode 生成的CMakeLists.txt , enable_testing() 默认已添加到该文件中).
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 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")
第一个测试只是验证应用程序是否运行,没有段故障或崩溃,并且返回值为零。这是CTest测试的基本形式。
下一个测试使用PASS_REGULAR_EXPRESSION 测试属性来验证测试的输出是否包含某些字符串。在本例中,验证当提供的参数数量不正确时是否打印使用消息。
最后,我们创建了一个名为do_test 的函数,它运行应用程序并验证计算出的平方根对于给定输入是否正确。每次调用do_test ,都会向项目添加一个测试,该测试具有名称、输入参数和对应输入参数的预期结果。
-
点击状态栏上的’Build’按钮, 重新构建. -
点击状态栏上的Run Test 按钮, 运行测试. -
输出窗口打印测试结果如下图所示:
|