Step 5: Installing and Testing¶

谷歌翻译
练习 1 - 安装规则
通常,仅仅构建可执行文件是不够的,它还应该是可安装的。使用 CMake,我们可以使用 install()命令。在 CMake 中支持构建的本地安装通常很简单,只需指定安装位置以及要安装的目标和文件即可。

目标
安装Tutorial可执行文件和MathFunctions库。

有用的材料
install()

要编辑的文件
MathFunctions/CMakeLists.txt

CMakeLists.txt

入门
目录中提供了起始代码Step5。在本练习中,完成。TODO 1TODO 4

首先,更新MathFunctions/CMakeLists.txt以将 MathFunctions和tutorial_compiler_flags库安装到目录中。在同一个文件中,指定安装到目录lib 所需的安装规则 。MathFunctions.hinclude

然后,更新顶层CMakeLists.txt以将可执行文件安装Tutorial到bin目录中。最后,应将任何头文件安装到目录中include。请记住, TutorialConfig.hPROJECT_BINARY_DIR。

构建并运行
创建一个名为的新目录Step5_build。运行 cmake可执行文件或 cmake-gui配置项目,然后使用您选择的构建工具来构建它。

–install 然后,使用cmake命令(在 3.15 中引入,旧版本的 CMake 必须使用)。此步骤将安装适当的头文件、库和可执行文件。例如:make install

cmake --install .
对于多配置工具,不要忘记使用参数 --config来指定配置。

cmake --install . --config Release
如果使用 IDE,只需构建INSTALL目标即可。您可以从命令行构建相同的安装目标,如下所示:

cmake --build . --target install --config Debug
CMake 变量CMAKE_INSTALL_PREFIX用于确定文件安装的根目录。如果使用该 命令,可以通过参数覆盖安装前缀 。例如:cmake --install–prefix

cmake --install . --prefix “/home/myuser/installdir”
导航到安装目录并验证安装是否Tutorial 运行。

解决方案
我们项目的安装规则非常简单:

对于MathFunctions,我们要将库和头文件分别安装到lib和目录中。include

对于Tutorial可执行文件,我们希望将可执行文件和配置的头文件分别安装到bin和include目录中。

因此我们在最后MathFunctions/CMakeLists.txt添加:

TODO 1:单击显示/隐藏答案
TODO 1:MathFunctions/CMakeLists.txt
set(installable_libs MathFunctions tutorial_compiler_flags)
if(TARGET SqrtLibrary)
list(APPEND installable_libs SqrtLibrary)
endif()
install(TARGETS ${installable_libs} DESTINATION lib)

TODO 2:单击显示/隐藏答案
TODO 2:MathFunctions/CMakeLists.txt
install(FILES MathFunctions.h DESTINATION include)
可执行文件和配置的头文件的安装规则Tutorial类似。在顶层末尾CMakeLists.txt我们添加:

TODO 3,4:单击显示/隐藏答案
CMakeLists.txt
install(TARGETS Tutorial DESTINATION bin)
install(FILES “${PROJECT_BINARY_DIR}/TutorialConfig.h”
DESTINATION include
)
这就是创建本教程的基本本地安装所需要的全部内容。

练习 2 - 测试支持
CTest 提供了一种轻松管理项目测试的方法。可以通过add_test()命令。虽然本教程没有明确介绍,但 CTest 与其他测试框架之间有很多兼容性,例如GoogleTest。

目标
使用 CTest 为我们的可执行文件创建单元测试。

有用的材料
enable_testing()

add_test()

function()

set_tests_properties()

ctest

要编辑的文件
CMakeLists.txt

入门
目录中提供了起始源代码Step5。在此练习中,完成。TODO 5TODO 9

首先,我们需要启用测试。接下来,开始使用以下方法向我们的项目添加测试:add_test()。我们将通过添加 3 个简单测试来进行,然后您可以根据需要添加其他测试。

构建并运行
导航到构建目录并重建应用程序。然后,运行 ctest可执行文件:和。对于多配置生成器(例如 Visual Studio),必须使用标志指定配置类型。例如,要在 Debug 模式下运行测试,请从构建目录(而不是 Debug 子目录!)使用。Release 模式将从同一位置执行,但使用。或者, 从 IDE构建目标。ctest -Nctest -VV-C ctest -C Debug -VV-C ReleaseRUN_TESTS

解决方案
让我们测试一下我们的应用程序。在顶层CMakeLists.txt 文件的末尾,我们首先需要使用 enable_testing()命令。

TODO 5:单击显示/隐藏答案
TODO 5:CMakeLists.txt
enable_testing()
启用测试后,我们将添加一些基本测试来验证应用程序是否正常工作。首先,我们使用以下代码创建一个测试: add_test()运行Tutorial传入参数 25 的可执行文件。对于此测试,我们不会检查可执行文件的计算答案。此测试将验证应用程序是否运行、是否出现段错误或崩溃,以及是否具有零返回值。这是 CTest 测试的基本形式。

TODO 6:单击显示/隐藏答案
TODO 6:CMakeLists.txt
add_test(NAME Runs COMMAND Tutorial 25)
接下来,让我们使用PASS_REGULAR_EXPRESSIONtest 属性来验证测试的输出是否包含某些字符串。在本例中,验证在提供的参数数量不正确时是否打印使用消息。

TODO 7:单击显示/隐藏答案
TODO 7:CMakeLists.txt
add_test(NAME Usage COMMAND Tutorial)
set_tests_properties(Usage
PROPERTIES PASS_REGULAR_EXPRESSION “Usage:.*number”
)
我们将添加的下一个测试将验证计算值确实是平方根。

TODO 8:单击显示/隐藏答案
TODO 8:CMakeLists.txt
add_test(NAME StandardUse COMMAND Tutorial 4)
set_tests_properties(StandardUse
PROPERTIES PASS_REGULAR_EXPRESSION “4 is 2”
)
这一个测试不足以让我们确信它适用于所有传入的值。我们应该添加更多测试来验证这一点。为了轻松添加更多测试,我们创建了一个名为的函数,该函数do_test运行应用程序并验证计算出的平方根对于给定的输入是否正确。对于每次调用do_test,都会向项目添加另一个测试,该测试具有名称、输入和基于传递的参数的预期结果。

TODO 9:单击显示/隐藏答案
TODO 9:CMakeLists.txt
function(do_test target arg result)
add_test(NAME Comp${arg} COMMAND ${target} a r g ) s e t t e s t s p r o p e r t i e s ( C o m p {arg}) set_tests_properties(Comp arg)settestsproperties(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”)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值