【问题标题】:Unable to build test unit with include(ctest)?无法使用 include(ctest) 构建测试单元?
【发布时间】:2013-03-22 03:48:27
【问题描述】:

我的项目结构是https://github.com/yumyai/cmake-sample。类似于本帖CMake: Project structure with unit tests中的项目。

每当我将 include(CTest) 添加到顶级 CMakeLists.txt 中时,我都无法构建测试文件(make test 不会构建任何东西)。但如果我将include(CTest) 注释掉,我可以使用make test 构建单元测试执行程序就好了。

这是正常行为还是我忘记了什么?

【问题讨论】:

    标签: c++ cmake


    【解决方案1】:

    您的示例看起来不错 - 无论有无 include(CTest) 行,它都可以使用。

    可能是改CMakeLists.txt后没有重新编译,所以看起来make test什么都不做?

    如果您省略include(CTest) 行并执行make test,则ctest -N 应输出如下内容:

     Test project <path to build>
    
     Total Tests: 0
    

    如果添加include(CTest) 行并执行make test,则ctest -N 应输出如下内容:

     Test project <path to build>
     Test #1: SqrTest
    
     Total Tests: 1
    

    这应该是唯一的区别 - 测试是否在 CTest 注册。在每种情况下,如果make test 之前已经成功运行,那么make test 真正产生的唯一效果就是重新运行CMake。如果运行之间 CMakeLists.txt 中的更改不影响实际测试目标,则不会重新构建。

    【讨论】:

    • 我试过了,但它不起作用。 (ctest -N 显示的测试编号恰到好处,但make test 仍然失败,如主题中所述)。您是否在顶级目录上尝试过?我在 ./build 目录中构建,而不是在项目的顶层。哦,“没有构建任何东西”,因为根本没有构建任何可执行文件。我在每次迭代中清除所有内容以确保没有任何问题。
    • 啊 - 我从来没有发现这一点,因为它在使用 MSVC 的 Windows 上不是问题,但你不应该将你的目标称为“测试”。尝试将名称更改为例如“测试”或“我的测试”。 (见stackoverflow.com/a/736838/424459)。我将更新我的其他答案以反映这一点。此外,您需要从 src/CMakeLists.txt 中的add_executable(demo main.cpp Sqr) 中删除多余的Sqr
    猜你喜欢
    • 2021-09-25
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    相关资源
    最近更新 更多