我想写一个CMakeLists.txt,以便我可以正常运行我的测试或使用valgrind。我已经看到很多将ctest与valgrind集成在一起,但都假设您想要设置一个服务器来将测试结果提交给dart仪表板。我只想在我的机器上运行测试并在命令行上查看结果。如何让ctest使用没有飞镖的valgrind运行程序?
如果我必须做一个cmake -D VALGRIND = ON那很好,但我宁愿生成名为“foo”和“valgrind_foo”的测试,如果可能的话。
我想写一个CMakeLists.txt,以便我可以正常运行我的测试或使用valgrind。我已经看到很多将ctest与valgrind集成在一起,但都假设您想要设置一个服务器来将测试结果提交给dart仪表板。我只想在我的机器上运行测试并在命令行上查看结果。如何让ctest使用没有飞镖的valgrind运行程序?
如果我必须做一个cmake -D VALGRIND = ON那很好,但我宁愿生成名为“foo”和“valgrind_foo”的测试,如果可能的话。
我使用valgrind进行记忆检查。要配置Valgrind的,我在构建系统定义了以下变量:
find_program(MEMORYCHECK_COMMAND valgrind)
set(MEMORYCHECK_COMMAND_OPTIONS "--trace-children=yes --leak-check=full")
此外,还有就是我的valgrind镇压文件:
set(MEMORYCHECK_SUPPRESSIONS_FILE "${PROJECT_SOURCE_DIR}/valgrind_suppress.txt")
后,你写你的CMakeLists.txt文件和正确配置的valgrind在其中,您可以运行以下命令:
cmake -G ... (to configure your build)
ctest -D ExperimentalBuild (this will build your code)
ctest -R testName -D ExperimentalTest (just runs the test)
ctest -R testName -D ExperimentalMemCheck (to run the test under valgrind)
这将欺骗您的构建系统在本地运行测试自动化。它希望你运行:
ctest -R testName -D ExperimentalSubmit
旁边,递交给(默认或你)仪表板,但你并不需要经过此步骤来运行你想要什么。结果将存储在Testing/Temporary /目录中。
看来下面就足够了。我之前没有使用separate_arguments,那是我的愚蠢。
function(add_memcheck_test name binary)
set(memcheck_command "${CMAKE_MEMORYCHECK_COMMAND} ${CMAKE_MEMORYCHECK_COMMAND_OPTIONS}")
separate_arguments(memcheck_command)
add_test(${name} ${binary} ${ARGN})
add_test(memcheck_${name} ${memcheck_command} ./${binary} ${ARGN})
endfunction(add_memcheck_test)
function(set_memcheck_test_properties name)
set_tests_properties(${name} ${ARGN})
set_tests_properties(memcheck_${name} ${ARGN})
endfunction(set_memcheck_test_properties)
这似乎比创建实验构建简单。 – aisbaa 2014-01-28 12:15:04
我而言太简单了,我只是用一个自定义的目标:
project(bftest)
add_executable(bftest main.c)
target_link_libraries(bftest LINK_PUBLIC bf)
find_program(VALGRIND "valgrind")
if(VALGRIND)
add_custom_target(valgrind
COMMAND "${VALGRIND}" --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 --track-fds=yes $<TARGET_FILE:bftest>)
endif()
你如何“正确配置valgrind”? – ibizaman 2014-12-24 13:09:17
好问题...我编辑了答案。 – KlingonJoe 2014-12-25 14:17:15