失败时如何让CMake / CTest memcheck以状态代码1退出?

时间:2019-03-24 08:29:16

标签: c cmake valgrind ctest

我想使用ctest与valgrind一起运行测试。 因此,我在cmake文件中写了以下内容:

include(CTest)

find_program(MEMORYCHECK_COMMAND valgrind)
set(MEMORYCHECK_COMMAND_OPTIONS "--leak-check=full --error-exitcode=1")
set(MEMORYCHECK_SUPPRESSIONS_FILE "${PROJECT_SOURCE_DIR}/.valgrind-suppressions")

这似乎有效。当我在一个泄漏的程序上运行ctest -D ExperimentalMemCheck .时,它表明已发现内存泄漏,但是不会以状态!= 0退出。

如何在失败时获得退出代码1?

2 个答案:

答案 0 :(得分:2)

关键是将set(MEMORYCHECK_COMMAND_OPTIONS "--error-exitcode=1")置于include(CTest)调用之上。显然,仅在首次包含CTest时才考虑该变量,而在包含CTest之后对其进行设置则无效。

然后调用ctest -T memcheck时,该命令将以非零退出状态正确退出。

也请参阅以下问题以供参考:How to pass arguments to memcheck with ctest?

答案 1 :(得分:0)

默认情况下,valgrind memcheck退出,并显示错误消息,确定并可能发生泄漏。

您可能希望有更多的泄漏类型导致错误退出, 通过使用--errors-for-leak-kinds:

--errors-for-leak-kinds=kind1,kind2,..  which leak kinds are errors?
                                        [definite,possible]
    where kind is one of:
      definite indirect possible reachable all none