2012-01-03 79 views
2

我有一个小而不平凡的项目,由于架构原因,它被构建为三个独立项目,它们是相互依赖的,所以除非我特别关注或者改进测试覆盖率发现了一个漏洞,对我来说,从项目根源开始工作是有道理的。使用CTest运行嵌套测试

布局是这样的:

/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/

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

+0

你在最外面的CMakeLists.txt中有'enable_testing()'调用吗? – sakra 2012-01-03 18:45:39

+0

'enable_testing()'位于'/ src/libmyproject/CMakeLists.txt'中,另外还有一个add_subdirectory('tests')',它正确地(在'/ src/libmyproject/build'中)编译,用'ctest')运行测试。将'enable_testing()'添加到顶部'CMakeLists.txt'不会改变任何内容。 '/ src/libmyproject/tests /'中的'CMakeLists.txt'包含'add_test()'调用本身。 – 2012-01-03 22:32:11

+0

也许你在所有的add_subdirectory()调用之后调用了enable_testing()?它应该在add_subdirectory调用之前执行。尽管如此,在我的回答中,首选“include(CTest)”,它会为您调用enable_testing()。 – DLRdave 2012-11-08 15:13:42

回答

3

include(CTest) 

在顶层的CMakeLists.txt文件做任何add_subdirectory调用之前。

这将为您调用enable_testing,并且如果您想要在项目上运行ctest仪表板脚本以将结果发送到CDash服务器,也会进行设置。

相关问题