Command line 如何通过ctest将参数传递给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来运行带有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 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设置项目选项,这是获得的方法

如果您希望在已正确配置生成目录后修改这些选项,则可以:

  • 直接修改DartConfiguration.tcl,但请注意,如果cmake再次运行,此文件将被覆盖,因为每次cmake运行时都会重新生成此文件
  • 使用ctest
    --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
    时,它解析文件以填充其内部变量: 我不清楚这是如何与