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

标签 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?

最佳答案

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

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

另请参阅此问题以供引用:How to pass arguments to memcheck with ctest?

关于c - 如何让 CMake/CTest memcheck 在失败时以状态码 1 退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55321934/

相关文章:

c - Valgrind 错误、大小读取无效和条件跳转或移动取决于未初始化的值

c - 代码的链接时间运行? (具体来说,Valgrind 似乎在链接时提出的问题)

c - 需求中的 for 循环错误 (C)

c - 结构成员的大小

c - 获取 SCSI 的供应商名称

c++ - 使用cmake单独编译和链接CUDA C++设备代码

c++ - OSX 上的 CMake 和 Boost - 没有制定目标的规则

c - 在地址中使用先前参数时 Sscanf 未初始化的值

c - C语言中字母和整数的区别

cmake - Clion 或 cmake 看不到环境变量