Reputation: 2749
I want to use ctest to run my tests with valgrind. Thus I have written the following in my cmake file:
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")
This seems to work. When I run ctest -D ExperimentalMemCheck .
on a leaking program it shows me that it has found memory leaks, however does not exit with status != 0.
How can I get a exit code 1 on failure?
Upvotes: 9
Views: 1667
Reputation: 546
The critical thing is that you put set(MEMORYCHECK_COMMAND_OPTIONS "--error-exitcode=1")
ABOVE the include(CTest)
call. The variable is apparently only taken into account when first including CTest and has no effect when setting it after including CTest.
When then calling ctest -T memcheck
, the command correctly exits with a non-zero exit status.
Also see this questions for reference: How to pass arguments to memcheck with ctest?
Upvotes: 4
Reputation: 3807
By default, valgrind memcheck exits with an error for leak kinds definite and possible.
You might want to have more leak kinds causing an error exit, by using --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
Upvotes: -1