TL; DR
ctest --overwrite MemoryCheckCommandOptions="--leak-check=full --error-exitcode=100" \
--overwrite MemoryCheckSuppressionFile=/path/to/valgrind.suppressions \
-T memcheck
Объяснение
Я наконец нашел правильный способ переопределить такие переменные, но, к сожалению, это нелегко понять из документации,Итак, чтобы помочь следующей бедной душе, которая должна с этим справиться, вот мое понимание различных способов установки опций для memcheck
.
В CTestConfig.cmake
в вашем источнике высшего уровня dir,или в CMakeLists.txt
( до вызова include(CTest)
) вы можете установить MEMORCHECK_COMMAND_OPTIONS
или MEMORYCHECK_SUPPRESSIONS_FILE
.Когда вы include(CTest)
, CMake сгенерирует DartConfiguration.tcl
в вашем каталоге компоновки, а установка вышеупомянутых переменных заполнит MemoryCheckCommandOptions
и MemoryCheckSuppressionFile
соответственно в этом файле.Это файл, который ctest
анализирует в вашем каталоге сборки, чтобы заполнить его внутренние переменные для выполнения шага memcheck
.Так что, если вы хотите установить параметры вашего проекта для memcheck во время конфигурации cmake, это способ получить.
Если вместо этого вы хотите изменить эти параметры после того, как у вас уже есть правильно настроенный каталог сборки, вы можете:
- Изменить DartConfiguration.tcl напрямую, но учтите, что это будет перезаписано, если cmake будет запущен снова, так как этот файл обновляется каждый раз при запуске cmake.
- Используйтеctest
--overwrite
опция командной строки, чтобы установить эти опции memcheck только для этого запуска.
Notes
- Я видел упоминаний онлайн изпеременная
CMAKE_MEMORYCHECK_COMMAND_OPTIONS
.Я понятия не имею, что это за переменная, и я не думаю, что cmake знает об этом каким-либо образом. - Установка
CTEST_MEMORYCHECK_COMMAND_OPTIONS
(переменная, которая на самом деле задокументирована в документации по cmake) в вашем CTestConfig.cmake
или CMakeLists.txt
не действует.Кажется, эта переменная работает только в «Клиентских сценариях CTest» , которые я никогда не использовал. - К сожалению, и
MEMORCHECK_COMMAND_OPTIONS
, и MEMORYCHECK_SUPPRESSIONS_FILE
явно не задокументированы в cmake , только косвенно, в документации ctest и учебнике Testing With CTest .
Когда в сборке запускается ctest
, онанализирует файл для заполнения внутренних переменных: https://cmake.org/cmake/help/latest/manual/ctest.1.html#dashboard-client-via-ctest-command-line Мне не ясно, как это взаимодействует с