Command line 如何通过ctest将参数传递给memcheck?
我想从命令行使用ctest来运行带有memcheck的测试,并为memcheck命令传入参数 我可以运行Command line 如何通过ctest将参数传递给memcheck?,command-line,cmake,valgrind,ctest,memcheck,Command Line,Cmake,Valgrind,Ctest,Memcheck,我想从命令行使用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\u MEMCHECK\u COMMAND\u O
ctest-R my_test
运行我的测试,甚至可以运行ctest-R my_test-T memcheck
通过memcheck运行它
但是我似乎找不到一种方法将参数传递给memcheck命令,比如--leak check=full
或--suppressions=/path/to/file
阅读完ctest的文档后,我尝试将-D
选项与ctest\u MEMCHECK\u COMMAND\u OPTIONS
和MEMCHECK\u COMMAND\u 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命令?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)
之前),您可以设置MEMORYCHECK\u命令选项
或MEMORYCHECK\u抑制文件
。
当您include(CTest)
时,CMake将在生成目录中生成一个DartConfiguration.tcl
,设置上述变量将分别填充此文件中的MemoryCheckCommandOptions
和MemoryCheckSuppressionFile
。
这是ctest
在构建目录中解析的文件,用于填充运行memcheck
步骤的内部变量。
因此,如果您想在cmake配置期间为memcheck设置项目选项,这是获得的方法
如果您希望在已正确配置生成目录后修改这些选项,则可以:
--overwrite
命令行选项仅为该运行设置这些memcheck选项CMAKE\u MEMORYCHECK\u命令\u选项变量。我不知道这个变量是什么,我也不认为cmake以任何方式知道它
CTestConfig.cmake
或CMakeLists.txt
中设置CTEST\u MEMORYCHECK\u COMMAND\u选项(cmake文档中实际存在的变量)无效。这个变量似乎只在中工作,我从未使用过
MEMORYCHECK\u COMMAND\u选项
和MEMORYCHECK\u SUPPRESSIONS\u文件
在文档和教程中没有明确记录,只是间接记录ctest
时,它解析文件以填充其内部变量:
我不清楚这是如何与