【问题标题】:What does enable_testing() do in cmake?enable_testing() 在 cmake 中做了什么?
【发布时间】:2018-11-01 06:39:30
【问题描述】:

我看到要添加我的谷歌测试(对于我的 cpp 项目),我需要在根源目录中调用 enable_testing()。有人能解释一下这到底是做什么的吗?还有为什么 cmake 不把这个设为默认值?

这是我可以从文档中得到的全部内容。

启用对此目录及以下目录的测试。另请参阅 add_test() 命令。注意 ctest 期望在构建中找到一个测试文件 目录根。因此,这个命令应该在源码中 目录根目录。

【问题讨论】:

  • 官方文档太坑了!

标签: unit-testing cmake


【解决方案1】:

当您调用 add_test(...) 时,CMake 不会生成测试,除非已调用 enable_testing()。请注意,您通常不需要直接调用它。只需include(CTest),它就会为您调用它。

我的 CMake 设置通常如下所示:

include(CTest) # note: this adds a BUILD_TESTING which defaults to ON

# ...

if(BUILD_TESTING)
  add_subdirectory(tests)
endif()

tests 目录中:

# setup test dependencies
# googletest has some code they explain on how to set it up; put that here

add_executable(MyUnitTests
    # ...
)

target_link_libraries(MyUnitTests gtest_main)

add_test(MyUnitTestName MyUnitTests)

【讨论】:

    【解决方案2】:

    它在生成器中的sets a definition CMAKE_TESTING_ENABLED,如果 定义,则允许cmake 跳过许多与向ctest 注册单元测试相关的额外处理。 (example)

    这样做的主要好处是它允许您在调用 cmake 时选择性地启用/禁用构建文件中的测试生成。

    例如,您可以将以下 sn-p 放入您的根目录CMakeLists.txt file

    它创建了一个启用测试的选项,默认情况下是关闭的。

    option(ENABLE_TESTS "Enable tests" OFF)
    if (${ENABLE_TESTS})
        enable_testing()
    endif()
    

    您只需要这样做一次,在您的根目录CMakeLists.txt 中,在其余的 cmake 文件中您可以愉快地调用add_test() 等,而不必担心每次都检查if (${ENABLE_TESTS})

    【讨论】:

      猜你喜欢
      • 2021-10-14
      • 2012-08-27
      • 2020-10-29
      • 1970-01-01
      • 2014-08-03
      • 2012-02-12
      • 2010-10-26
      • 2019-07-12
      • 2010-11-20
      相关资源
      最近更新 更多