注:
- 文章参考: CMake Tutorial, 但操作方法和步骤与原文不同.
- 文章所有操作均在
VSCode
中完成.点击Windows 上VS Code + CMake + MSYS2 打造C++开发环境, 获取配置VSCode
开发环境的详细步骤.- 点击CMake 教程, 查看CMake教程主页.
- 点击CMake 教程(Step 3): 为库添加使用需求, 查看上一节.
现在我们将开始向项目中添加安装规则和测试支持.
注: 接触过开源项目的同学,可能知道, 很多开源项目源码都是使用
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)
- 在顶层
CMakeLists.txt
的末尾添加:
# 将应用程序放到`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")
- 点击add_test, 查看该命令的详细描述.
- 点击set_tests_properties, 查看该命令的详细描述.
第一个测试只是验证应用程序是否运行,没有段故障或崩溃,并且返回值为零。这是CTest测试的基本形式。
下一个测试使用PASS_REGULAR_EXPRESSION
测试属性来验证测试的输出是否包含某些字符串。在本例中,验证当提供的参数数量不正确时是否打印使用消息。
最后,我们创建了一个名为do_test
的函数,它运行应用程序并验证计算出的平方根对于给定输入是否正确。每次调用do_test
,都会向项目添加一个测试,该测试具有名称、输入参数和对应输入参数的预期结果。
-
点击状态栏上的’Build’按钮, 重新构建.
-
点击状态栏上的
Run Test
按钮, 运行测试.
-
输出窗口打印测试结果如下图所示: