当前位置:网站首页>CMake教程Step4(安装和测试)
CMake教程Step4(安装和测试)
2022-07-05 16:36:00 【开始沸腾了】
CMake官方文档
参考官方cmake3.24教程翻译
https://cmake.org/cmake/help/v3.24/guide/tutorial/index.html
https://gitlab.kitware.com/cmake/cmake/-/tree/master/Help/guide/tutorial
step4
https://cmake.org/cmake/help/v3.24/guide/tutorial/Installing%20and%20Testing.html
我的仓库 :
https://github.com/FRBoiling/cmake-tutorial.git
现在我们可以开始向我们的项目添加安装规则和测试支持
安装规则
安装规则相当简单:
对于MathFunctions库,我们想要安装库和头文件,
对于应用程序,我们要安装可执行文件和配置的头文件。
因此,我们在MathFunctions/CMakeLists.txt的末尾添加:
install(TARGETS MathFunctions DESTINATION lib)
install(FILES math_functions.h DESTINATION include)
在顶层的Step4/CMakeLists.txt文件的末尾添加:
install(TARGETS Tutorial DESTINATION bin)
install(FILES "${PROJECT_BINARY_DIR}/tutorial_config.h"
DESTINATION include
)
这就是创建本教程的基本本地安装所需的全部内容。
现在运行cmake可执行文件或cmake-gui来配置项目,然后使用您选择的构建工具构建它。
然后在命令行中使用cmake命令(3.15引入,旧版本的cmake必须使用make install)的install选项来运行安装步骤。对于多配置工具,不要忘记使用——config参数来指定配置。如果使用IDE,只需构建INSTALL目标。这一步将安装适当的头文件、库和可执行文件。例如:
cmake --install .
如上,安装时候默认路径权限不够。可以提升操作权限,或者指定权限合适的目录去安装。
CMake变量CMAKE_INSTALL_PREFIX用于确定将安装文件的根目录。
如果使用cmake --install命令,可以通过–prefix参数覆盖安装前缀。例如:
cmake --install . --prefix "../Step4_Installdir"
进入到安装目录,验证安装的教程是否运行。
测试支持
接下来,让我们测试应用程序。在顶级CMakeLists.txt文件的末尾,我们可以启用测试,然后添加一些基本测试,以验证应用程序是否正常工作。
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的每次调用,都会将另一个测试添加到项目中,该测试带有名称、输入和基于传递的参数的预期结果。
重新构建应用程序,然后进入Step4_build目录 ,运行ctest可执行文件:
ctest -N和ctest -VV。
对于多配置生成器(例如Visual Studio),配置类型必须使用-C 标志指定。
例如,要在Debug模式下运行测试,请使用二进制目录(而不是Debug子目录!)中的ctest -C Debug -VV。
Release模式将从相同的位置执行使用-C Release。或者,从IDE构建RUN_TESTS目标。
边栏推荐
- 【剑指 Offer】62. 圆圈中最后剩下的数字
- Jarvis OJ Flag
- File operation --i/o
- Android privacy sandbox developer preview 3: privacy, security and personalized experience
- Jarvis OJ 简单网管协议
- Embedded-c Language-4
- Use byte stream to read Chinese from file to console display
- Jarvis OJ Webshell分析
- The survey shows that the failure rate of traditional data security tools in the face of blackmail software attacks is as high as 60%
- Embedded -arm (bare board development) -1
猜你喜欢
Jarvis OJ Flag
[Web attack and Defense] WAF detection technology map
Jarvis OJ Flag
Deep dive kotlin synergy (XXI): flow life cycle function
国内首家 EMQ 加入亚马逊云科技「初创加速-全球合作伙伴网络计划」
深耕5G,芯讯通持续推动5G应用百花齐放
Use JDBC technology and MySQL database management system to realize the function of course management, including adding, modifying, querying and deleting course information.
Detailed explanation of use scenarios and functions of polar coordinate sector diagram
兰空图床苹果快捷指令
How to install MySQL
随机推荐
Learnopongl notes (II) - Lighting
【Web攻防】WAF检测技术图谱
Embedded -arm (bare board development) -1
The second day of learning C language for Asian people
thinkphp3.2.3
Jarvis OJ Flag
PHP人才招聘系统开发 源代码 招聘网站源码二次开发
Facing new challenges and becoming a better self -- attacking technology er
【7.7直播预告】《SaaS云原生应用典型架构》大咖讲师教你轻松构建云原生SaaS化应用,难题一一击破,更有华为周边好礼等你领!
Embedded UC (UNIX System Advanced Programming) -2
ECU introduction
外盘期货平台如何辨别正规安全?
Bs-xx-042 implementation of personnel management system based on SSM
Jarvis OJ webshell analysis
Application of threshold homomorphic encryption in privacy Computing: Interpretation
Apple has abandoned navigationview and used navigationstack and navigationsplitview to implement swiftui navigation
Google Earth engine (GEE) -- a brief introduction to kernel kernel functions and gray level co-occurrence matrix
Detailed explanation of use scenarios and functions of polar coordinate sector diagram
Jarvis OJ simple network management protocol
SQL injection of cisp-pte (Application of secondary injection)