4

我有一个小而重要的项目,由于架构原因,它被构建为三个独立的项目,它们是相互依赖的,所以除非我特别专注,或者发现一个漏洞来提高测试覆盖率,否则它对我从项目根目录工作。

布局是这样的:

/CMakeLists.txt
/build/
/src/command-line-application/
/src/command-line-application/CMakeLists.txt
/src/command-line-application/build/
/src/command-line-application/src/
/src/command-line-application/tests/
/src/command-line-application/include/
/src/vlc-plugin/
/src/vlc-plugin/src/
/src/libmyproject/
/src/libmyproject/CMakeLists.txt
/src/libmyproject/build/
/src/libmyproject/src/
/src/libmyproject/tests/
/src/libmyproject/include/
/src/libmyotherproject/
/src/libmyotherproject/CMakeLists.txt
/src/libmyotherproject/build/
/src/libmyotherproject/src/
/src/libmyotherproject/tests/
/src/libmyotherproject/include/

关于架构的一句话,libmyproject是我的应用程序的真正核心,它是这样构建的,因为 CLI 是一种将代码发送给最终用户的可怕方式,作为一个库,它也用于 C# 和 Objective-C 应用程序。(以及所有按预期工作)

是一些特定于libmyotherproject平台的支持代码,不直接连接到libmyproject,它有一些单元测试。

vlc-plugin这里并不重要,只是表明并非所有内容/src/*/都有单元测试。

我的工作流程通常是破解 CLI 应用程序,直到出现有用的东西,然后将其重构到库中,并确保它是可移植的。

当我工作时/src/*/build/,通常是跑步cmake ../ && make && ctest --output-on-failure,一切正常。

当我在 中工作/build并运行cmake时,各个组件都是add_subdirectories()从 CMake 正确构建(使用)的,但CTest不会递归地找到测试。

的文档对CTest您应该做的事情有点帮助:

USAGE
         ctest [options]

DESCRIPTION
       The  "ctest"  executable is the CMake test driver program.  CMake-generated build trees created for
       projects that use the ENABLE_TESTING and ADD_TEST commands have testing support.  This program will
       run the tests and report results.

ADD_TEST()自从电话出现以来,我就已经预料/src/libmyotherproject/tests/CMakeLists.txt到它们会运行吗?(它们至少是在我运行时编译cmake/build/

我希望我能够提供足够的信息,谢谢。

4

1 回答 1

5

include(CTest)

在您进行任何 add_subdirectory 调用之前,在您的顶级 CMakeLists.txt 文件中。

这将为您调用 enable_testing,如果您想在项目上运行 ctest 仪表板脚本以将结果发送到 Cdash 服务器,还可以进行设置。

于 2012-11-08T15:12:46.217 回答