我想从命令行使用ctest来使用memcheck运行测试并为memcheck命令传递参数。
我可以运行ctest -R my_test
来运行测试,甚至可以运行ctest -R my_test -T memcheck
来通过memcheck运行它。
但是我似乎找不到找到将参数传递给该memcheck命令的方法,例如--leak-check=full
或--suppressions=/path/to/file
。
阅读ctest的文档后,我尝试将-D
和CTEST_MEMCHECK_COMMAND_OPTIONS
与MEMCHECK_COMMAND_OPTIONS
选项一起使用。我也尝试将它们设置为环境变量。我的尝试均未产生任何不同的测试命令。总是这样:
Memory check command: /path/to/valgrind "--log-file=/path/to/build/Testing/Temporary/MemoryChecker.7.log" "-q" "--tool=memcheck" "--leak-check=yes" "--show-reachable=yes" "--num-callers=50"
如何从ctest命令行控制memcheck命令?
答案 0 :(得分:0)
TL; DR
ctest --overwrite MemoryCheckCommandOptions="--leak-check=full --error-exitcode=100" \
--overwrite MemoryCheckSuppressionFile=/path/to/valgrind.suppressions \
-T memcheck
我终于找到了覆盖这些变量的正确方法,但是不幸的是,从文档中理解这一点并不容易。
因此,为了帮助需要处理的下一个可怜的人,这是我对memcheck
设置选项的各种方式的理解。
在顶级源目录的CTestConfig.cmake
中或CMakeLists.txt
中(在调用include(CTest)
之前的 中),您可以设置{{1} }或MEMORCHECK_COMMAND_OPTIONS
。
当您MEMORYCHECK_SUPPRESSIONS_FILE
时,CMake将在您的构建目录中生成一个include(CTest)
,并且设置上述变量将分别在此文件中填充DartConfiguration.tcl
和MemoryCheckCommandOptions
。
这是MemoryCheckSuppressionFile
在构建目录中解析的文件,用于填充其内部变量以运行ctest
步骤。
因此,如果要在cmake配置期间设置项目的memcheck选项,这就是获得方法。
如果您想在已经正确配置了构建目录之后修改这些选项,则可以:
memcheck
命令行选项仅针对该运行设置这些memcheck选项。--overwrite
变量的mentions。我不知道这个变量是什么,我不认为cmake会以任何方式知道它。CMAKE_MEMORYCHECK_COMMAND_OPTIONS
或CTEST_MEMORYCHECK_COMMAND_OPTIONS
中设置CTestConfig.cmake
(在cmake文档中实际上为documented的变量)无效。看来此变量仅在"CTest Client Scripts"中有效,我从未使用过。CMakeLists.txt
和MEMORCHECK_COMMAND_OPTIONS
,而在ctest文档和Testing With CTest教程中却没有间接记录。在构建中运行MEMORYCHECK_SUPPRESSIONS_FILE
时,它将解析文件以填充内部变量:
https://cmake.org/cmake/help/latest/manual/ctest.1.html#dashboard-client-via-ctest-command-line
我不清楚这与