我想写一个CMakeLists.txt,以便我可以正常运行我的测试或使用valgrind.我已经看到很多关于将ctest与valgrind集成,但所有这些都假设您要设置服务器以将测试结果提交到飞镖仪表板.我只想在我的机器上运行测试并在命令行上查看结果.
如果我必须做一个cmake -D VALGRIND = ON就好了,但如果可能的话,我宁愿生成名为"foo"和"valgrind_foo"的测试.
Kli*_*Joe 24
我使用valgrind进行内存检查.要配置valgrind,我在构建系统中定义以下变量:
find_program( MEMORYCHECK_COMMAND valgrind )
set( MEMORYCHECK_COMMAND_OPTIONS "--trace-children=yes --leak-check=full" )
Run Code Online (Sandbox Code Playgroud)
另外,还有我的valgrind抑制文件:
set( MEMORYCHECK_SUPPRESSIONS_FILE "${PROJECT_SOURCE_DIR}/valgrind_suppress.txt" )
Run Code Online (Sandbox Code Playgroud)
在编写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)
Run Code Online (Sandbox Code Playgroud)
这将欺骗您的构建系统在本地运行测试自动化.它希望你运行:
ctest -R testName -D ExperimentalSubmit
Run Code Online (Sandbox Code Playgroud)
接下来,提交到(默认或您的)仪表板,但您不需要执行此步骤来运行您想要的内容.结果将存储在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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11288 次 |
| 最近记录: |