我有一个小的,但不平凡的项目,由于体系结构的原因,它被构建为三个独立的项目,它们是相互依赖的,所以除非我特别关注,或者改进测试覆盖发现了一个漏洞,否则从项目根开始工作对我来说是有意义的。
布局如下:
/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
时,各个组件从CMake正确构建(使用add_subdirectories()
),但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
,他们会运行吗?(当我从/build/
运行cmake
时,它们至少是编译的)
我希望我能提供足够的信息,谢谢。
Put
include(CTest)
在你的顶级CMakeLists.txt文件之前,你做任何add_subdirectory调用。
这将为您调用enable_testing,并且如果您想在项目上运行ctest仪表板脚本以将结果发送到CDash服务器,也可以设置。