enable_testing()在cmake中做了什么?

时间:2018-05-22 13:11:49

标签: unit-testing cmake

我看到要添加我的google测试(对于我的cpp项目),我需要在根源目录中调用enable_testing()。有人可以解释这是真的吗?另外为什么cmake不会使这个默认?

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

  

启用此目录及以下的测试。另请参见add_test()   命令。请注意,ctest期望在构建中找到测试文件   目录根目录。因此,此命令应位于源中   目录根。

2 个答案:

答案 0 :(得分:9)

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

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

例如,您可以将以下代码段放在根CMakeLists.txt file中:

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

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

您只需要在根目录CMakeLists.txt中执行此操作一次,在其余的cmake文件中,您可以愉快地调用add_test()等,而无需担心检查if (${ENABLE_TESTS})每次

答案 1 :(得分:6)

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

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

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

# ...

if(BUILD_TESTING)
  add_subdirectory(tests)
endif()

测试目录中:

# 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)