安装和测试
下一篇:练习6 添加对测试仪表板的支持,上一篇:练习4 添加生成器表达式,目录|首页
温故知新
经过第一个练习,大家对于基本的使用应该已经掌握了,由于代码过多,在文档中详细介绍太过于啰嗦,大家可以自行下载代码参考
经过第一个练习,大家对于基本的使用应该已经掌握了,由于代码过多,在文档中详细介绍太过于啰嗦,大家可以自行下载代码参考
- 练习1 构建一个基本项目
cmake_minimum_required()是一个用于指定构建特定项目所需的最低CMake版本的函数。project()函数用于定义一个项目,并指定项目的名称及相关属性。add_executable()用于指定生成一个可执行文件的目标。CMAKE_CXX_STANDARD用于指定项目中C++编译器要遵循的C++标准。CMAKE_CXX_STANDARD_REQUIRED用于指示是否要求编译器强制使用指定的C++标准。set()函数用于设置变量的值。<PROJECT-NAME>_VERSION_MAJOR通常用于访问项目的主要版本号。<PROJECT-NAME>_VERSION_MINOR通常用于访问项目的次要版本号。configure_file()用于在生成构建系统时复制文件并替换其中的变量值。target_include_directories()用于指定一个目标(通常是可执行文件或库)的头文件包含路径。
- 练习2 添加库
add_library()用于创建和配置一个库目标。add_subdirectory()是用于将其他源代码目录(通常是子目录)添加到当前 CMake 项目中,并在这些子目录中构建其他 CMake 项目。target_link_libraries()用于为一个目标(通常是可执行文件或库)指定它所依赖的其他库。PROJECT_SOURCE_DIR它包含了当前 CMake 项目的根源代码目录的路径。if()用于根据条件的真假来执行不同的 CMake 代码块。option()命令用于定义用户可配置的选项。target_compile_definitions()用于为特定目标(通常是可执行文件或库)设置编译时宏定义(preprocessor definitions)。
- 练习3 添加库的使用要求
target_compile_options()用于为特定目标(通常是可执行文件或库)设置编译选项(compiler options)target_link_directories()命令用于为特定目标(通常是可执行文件或库)指定链接目录,以帮助构建系统在链接目标时查找共享库或库文件的位置。target_link_options()是 CMake 中的一个命令,用于为特定目标(通常是可执行文件或库)设置链接器选项。target_precompile_headers()是 CMake 3.16 版本引入的一项功能,它用于为目标(通常是可执行文件或库)预编译头文件(precompiled headers)以提高构建性能。target_sources()用于向特定目标(通常是可执行文件或库)添加源文件,以便将这些源文件编译并链接到目标中。target_compile_features()是 CMake 中的一个命令,用于为特定目标(通常是可执行文件或库)设置编译器支持的 C++ 特性(C++ features)。
- 练习4 添加生成器表达式
cmake-generator-expressions()(CMake 生成器表达式)是一种在 CMake 构建系统中用于生成构建文件的特殊表达式。
下一篇:练习6 添加对测试仪表板的支持,上一篇:练习4 添加生成器表达式,目录|首页
安装规则
通常,仅构建可执行文件是不够的,它还应该是可安装的。使用 CMake,我们可以使用以下命令指定安装规则 install()命令。在 CMake 中支持本地安装通常非常简单,只需指定安装位置以及要安装的目标和文件即可。
下一篇:练习6 添加对测试仪表板的支持,上一篇:练习4 添加生成器表达式,目录|首页
install
install()用于指定在构建完成后如何安装项目的文件和目标(可执行文件、库、头文件等)。通过使用 install 命令,你可以配置项目的安装目标目录以及要安装的文件和目标。
install 命令的基本语法如下:
install(
[TARGETS target1 target2 ...]
[EXPORT export-name]
[[ARCHIVE|LIBRARY|RUNTIME|INCLUDES|FRAMEWORK|BUNDLE|...] [DESTINATION <dir>]
[PERMISSIONS permissions...]
[CONFIGURATIONS [Debug|Release|...]]
[COMPONENT <component>]
[OPTIONAL]
[EXCLUDE_FROM_ALL]
)
下面是一些常见的 install 命令的用法:
- 安装目标文件:通过
TARGETS关键字,你可以指定要安装的目标(可执行文件、库等)。例如:
install(TARGETS myapp mylib
DEST```
这会将 `myapp` 和 `mylib` 安装到 `/usr/local/bin` 目录。
2. **安装文件**:你可以使用 `FILES` 关键字来安装文件,如配置文件或数据文件。例如:
```cmake
install(FILES myconfig.conf
DESTINATION /etc
)
这会将 myconfig.conf 安装到 /etc 目录。
- 安装目录:使用
DIRECTORY关键字可以将整个目录安装到目标目录中,包括目录下的文件和子目录。例如:
install(DIRECTORY mydata
DESTINATION /opt/myproject
)
这会将 mydata 目录及其内容安装到 /opt/myproject 目录。
- 设置文件权限:你可以使用
PERMISSIONS关键字设置安装的文件或目录的权限。例如:
install(FILES myconfig.conf
DESTINATION /etc
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
)
这会将 myconfig.conf 安装到 /etc 并设置相应的文件权限。
- 配置安装目录:通过
DESTINATION关键字,你可以指定安装的目标目录。 - 安装组件:使用
COMPONENT关键字可以将文件安装到不同的组件中。这对于安装具有不同用途的文件非常有用。 - 条件安装:使用
OPTIONAL关键字可以指定文件或目标是可选的,如果文件或目标不存在,则不会导致安装错误。 - 排除文件:使用
EXCLUDE_FROM_ALL关键字可以将文件或目标排除在make install的默认目标之外。
CMake 的 install 命令非常有用,因为它允许你定义项目的安装策略,以便将构建后的文件和目标复制到指定的位置,例如系统目录或自定义目录,以便用户或其他项目可以访问它们。这对于分发应用程序、库和配置文件非常有用。
下一篇:练习6 添加对测试仪表板的支持,上一篇:练习4 添加生成器表达式,目录|首页
测试支持
CTest 提供了一种轻松管理项目测试的方法。可以通过以下方式添加测试add_test()命令。尽管本教程中没有明确介绍,但 CTest 和其他测试框架之间有很多兼容性,例如GoogleTest。
下一篇:练习6 添加对测试仪表板的支持,上一篇:练习4 添加生成器表达式,目录|首页
enable_testing
enable_testing()用于启用测试支持,允许你在项目中定义和运行测试。测试是用于验证项目的功能和正确性的重要部分,特别是在软件开发过程中。通过启用测试支持,你可以使用CMake的测试框架来定义和运行各种测试。
enable_testing 命令没有参数,通常放在 CMakeLists.txt 文件的顶层。要启用测试支持,只需在项目的根目录的 CMakeLists.txt 文件中添加以下行:
enable_testing()
一旦启用了测试支持,你可以使用以下命令来定义和运行测试:
-
add_test命令:用于定义一个测试,指定测试的名称和要运行的命令。add_test(NAME mytest COMMAND myapp arg1 arg2)这将创建一个名为
mytest的测试,该测试将运行myapp可执行文件,并传递arg1和arg2作为参数。 -
enable_testing命令:用于在构建目录中启用测试。通常,你只需要在项目的根 CMakeLists.txt 文件中调用一次enable_testing()。
一旦测试已定义,你可以使用以下 CMake 的测试命令来运行测试:
ctest命令:用于运行测试套件,显示测试的结果,并提供详细的测试报告。ctest --verbose命令:用于以详细模式运行测试,显示测试的详细输出。
测试是确保代码的正确性和稳定性的关键部分,特别是在大型项目中。通过启用测试支持并使用 add_test 命令,你可以轻松地集成测试流程到你的 CMake 项目中,以确保项目在开发和部署过程中具有一致的质量。
下一篇:练习6 添加对测试仪表板的支持,上一篇:练习4 添加生成器表达式,目录|首页
add_test
add_test()用于定义和创建测试。测试是用于验证项目的功能和正确性的重要部分,特别是在软件开发过程中。通过使用 add_test 命令,你可以定义不同类型的测试,如单元测试、集成测试等,以确保项目的各个部分都按预期工作。
add_test 命令的基本语法如下:
add_test(NAME test_name [CONFIGURATIONS [Debug|Release|...]]
COMMAND command [arg1 [arg2 ...]])
NAME test_name: 指定测试的名称,这是一个用于标识测试的字符串。CONFIGURATIONS [Debug|Release|...](可选): 用于指定测试在哪些构建配置下运行。这可以根据不同的构建类型(Debug、Release 等)来配置测试。COMMAND command [arg1 [arg2 ...]]: 指定要在测试中运行的命令和参数。这通常是你的测试程序、可执行文件或脚本。
以下是一个示例用法:
add_test(NAME MyUnitTest COMMAND my_test_program)
在这个示例中,我们定义了一个名为 MyUnitTest 的测试,该测试将运行名为 my_test_program 的测试程序。你可以通过运行 ctest 来运行项目中定义的测试。
注意,add_test 命令通常在项目的 CMakeLists.txt 文件中使用,以便在构建和测试过程中执行所需的测试。
使用 add_test 命令可以确保项目的各个部分都按预期工作,并且有助于捕获潜在的问题和错误。测试是软件开发的一个重要组成部分,可以提高项目的质量和可维护性。
下一篇:练习6 添加对测试仪表板的支持,上一篇:练习4 添加生成器表达式,目录|首页
function
function()用于定义自定义函数(Custom Function)。自定义函数允许你在 CMakeLists.txt 文件中封装和重用一系列 CMake 命令和操作。这对于简化 CMake 脚本、提高可维护性和避免代码重复非常有用。
function 命令的基本语法如下:
function(function_name arg1 arg2 ...)
# CMake 命令和操作
endfunction()
function_name:自定义函数的名称,你可以在脚本中通过这个名称来调用函数。arg1,arg2, …:自定义函数的参数列表,可以有零个或多个参数。
以下是一个简单的示例,展示如何定义和使用自定义函数:
function(print_hello_world)
message("Hello, World!")
endfunction()
# 调用自定义函数
print_hello_world()
在这个示例中,我们定义了一个名为 print_hello_world 的自定义函数,该函数在调用时会打印 “Hello, World!” 消息。然后,我们通过 print_hello_world() 调用该函数。
自定义函数可以接受参数,并在函数体内使用这些参数进行操作。这允许你将通用操作封装在函数中,然后在不同的地方调用这些函数,以避免重复编写相同的代码。
自定义函数是 CMake 中组织和模块化脚本的强大工具,它们使你能够更轻松地管理项目的不同部分,并提高 CMake 脚本的可读性和维护性。
下一篇:练习6 添加对测试仪表板的支持,上一篇:练习4 添加生成器表达式,目录|首页
set_tests_properties
set_tests_properties()用于配置已定义的测试的属性。这可以用于修改测试的各种属性,如测试的标签、超时限制、环境变量、依赖关系等。
set_tests_properties 命令的基本语法如下:
set_tests_properties(test_name1 test_name2 ...
PROPERTIES
property1 value1
property2 value2
...
)
test_name1,test_name2, 等等: 要配置属性的测试的名称,可以一次配置多个测试。PROPERTIES: 指定要设置的测试属性。property1,property2, 等等: 要设置的属性的名称,如LABELS、TIMEOUT等。value1,value2, 等等: 要设置的属性的值。
以下是一些常见的属性,可以通过 set_tests_properties 命令进行配置:
-
LABELS: 用于为测试指定标签,以便将测试按类别进行组织。例如:set_tests_properties(mytest PROPERTIES LABELS "unit_tests") -
TIMEOUT: 用于设置测试的超时限制,以确保测试在规定时间内完成。例如:set_tests_properties(mytest PROPERTIES TIMEOUT 10) -
ENVIRONMENT: 用于设置测试运行时的环境变量。例如:set_tests_properties(mytest PROPERTIES ENVIRONMENT "MY_VARIABLE=my_value") -
DEPENDS: 用于指定测试之间的依赖关系,以确保在运行测试之前先运行其他测试。例如:set_tests_properties(mytest2 PROPERTIES DEPENDS mytest1)
通过使用 set_tests_properties 命令,你可以自定义测试的行为和属性,以满足项目的需求。这对于管理测试套件、自动化测试和测试结果报告非常有用。在实际项目中,通常会在 CMakeLists.txt 文件中定义测试,然后使用 set_tests_properties 命令来配置这些测试的属性。
下一篇:练习6 添加对测试仪表板的支持,上一篇:练习4 添加生成器表达式,目录|首页
ctest
ctest是 CMake 的测试驱动工具,用于运行和管理项目中定义的测试。它是与CMake一起提供的一个命令行工具,允许你自动运行测试,生成测试报告,以及执行各种测试任务。
下面是一些常见的用法和命令行选项:
-
运行所有测试:
ctest默认情况下,运行项目中定义的所有测试。
-
指定测试目录:
ctest --test-dir /path/to/tests指定测试所在的目录。
-
运行特定测试:
ctest -R test_name只运行名称匹配
test_name的测试。这可以帮助你运行特定的测试套件或单个测试。 -
以详细模式运行测试:
ctest --verbose以详细模式运行测试,显示每个测试的输出。
-
生成测试报告:
ctest -T test生成测试报告,通常以 XML 或 JSON 格式。
-
运行特定构建配置的测试:
ctest -C Debug仅运行指定构建配置(例如,Debug 或 Release)的测试。
-
运行测试并在失败时停止:
ctest -E "test_pattern" -V使用
-E选项和正则表达式模式来运行测试,-V选项用于在测试失败时停止。 -
指定测试并设置超时限制:
ctest -R test_name -T Test --timeout 60运行特定测试并设置超时限制为 60 秒。
ctest 是一个非常强大的工具,它可以帮助你管理项目中的测试,运行它们,并生成详细的测试报告。通过将测试集成到项目中,你可以确保项目的质量和正确性,并及时发现问题。
下一篇:练习6 添加对测试仪表板的支持,上一篇:练习4 添加生成器表达式,目录|首页
文章介绍了CMake中的关键概念,如安装规则、添加和配置测试、使用install()函数、自定义函数、set_tests_properties()和ctest工具。详细讲解了如何在CMake项目中设置安装、测试支持和管理测试套件。
2406

被折叠的 条评论
为什么被折叠?



