【发布时间】:2021-04-02 11:44:45
【问题描述】:
一些 CMake 项目为生成具有单元测试支持的项目添加了条件支持。项目根 CMakeLists.txt 文件中遵循的模式类似于:
cmake_minimum_required(VERSION 3.0)
(...)
# add subdirectories, libraries, executables, etc
(...)
option(ENABLE_TESTS "Generate project with unit test support" ON)
if(ENABLE_TESTS)
enable_testing()
add_subdirectory(tests)
endif()
虽然这种模式相当普遍,但我也注意到为单元测试选项选择的名称有些随意。尽管BUILD_TESTING 选项是在cmake v3.15 中引入的,但该名称在该版本之前远非标准名称。到目前为止,我注意到使用以下选项名称的项目:
BUILD_TESTSBUILD_TESTINGENABLE_TESTSRUN_TESTS- 等等……
考虑到这一点,有人知道是否有标准命名约定来控制是否将单元测试添加到 CMake 项目中?
【问题讨论】:
-
选项
BUILD_TESTING在 CMake 3.0 之前就已经存在。它是 CTest 模块的选项,而不仅仅是单元测试。参见例如documentation for CTest。而且我不知道可以控制测试可用性的其他(自定义)变量的命名约定。 -
恐怕选项
BUILD_TESTING来自ctest,而不是cmake 本身。尽管 ctest 很不错,但它仍然是一个外部模块,项目需要显式导入才能使用它。 -
is from ctest, not cmake per se我不明白。不,ctest是cmake的一部分。 -
@KamilCuk ctest 是 cmake 的扩展,就像许多其他与 cmake 捆绑在一起的扩展一样,例如 GoogleTest 或 AndroidTestUtilities。它绝不是内置的,也不是 cmake 构建系统的一部分。例如,您需要显式包含 ctest 模块才能使用它,否则您不需要。欲了解更多信息,请阅读cmake.org/cmake/help/latest/module/CTest.html
-
但是 ctest 是由 kitware 维护的,作为 cmake 的一部分随 cmake 一起提供。
you need to explicitly include the ctest module您还需要include(CheckSymbolExists)才能使用check_symbol_exists和许多其他库实用程序。就像 C 中的#include。stdio.h是 C 的一部分,同样ctest是cmake的一部分。我认为GoogleTest它主要是一个 C++ 测试框架,而不是 cmake 框架。 googletest 是否用于测试其他语言的测试?喜欢 bash 脚本?
标签: unit-testing cmake ctest