我看到要添加我的google测试(对于我的cpp项目),我需要在根源目录中调用enable_testing()。有人可以解释这是真的吗?另外为什么cmake不会使这个默认?
这是我从文档中可以得到的全部内容。
启用此目录及以下的测试。另请参见add_test() 命令。请注意,ctest期望在构建中找到测试文件 目录根目录。因此,此命令应位于源中 目录根。
答案 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)