当我尝试执行我的 CTest 脚本时,它抱怨“内存检查器 (MemoryCheckCommand) 未设置,或找不到指定的程序”但DartConfiguration.tcl
已创建并MemoryCheckCommand
正确设置为/usr/bin/valgrind
.
这是我的项目的简化布局:
.
├── SOURCES
│ ├── build
│ │ ├── CMakeCache.txt
│ │ [...]
│ ├── CMakeLists.txt
│ └── src
│ ├── CMakeLists.txt
│ [..]
├── gcc.cmake
└── TESTS
├── build
│ ├── x86
│ │ ├── CMakeCache.txt
│ │ ├── DartConfiguration.tcl
│ │ [...]
│ └── x86_64
│ ├── CMakeCache.txt
│ ├── DartConfiguration.tcl
│ [...]
├── CMakeLists.txt
├── CTestConfig.cmake
├── ctest_scripts
│ ├── TestValgrindJob64.cmake
│ └── TestValgrindJob.cmake
├── fakes
│ ├── CMakeLists.txt
│ [..]
├── libs
│ ├── googletest
│ │ ├── CMakeLists.txt
│ │ [..]
│ └── linux-9.3.0
│ ├── gmock
│ │ │
│ │ [..]
│ ├── gtest
│ │ │
│ │ [..]
│ ├── x86
│ │ ├── libgmock.a
│ │ └── libgtest.a
│ └── x86_64
│ ├── libgmock.a
│ └── libgtest.a
├── mocks
│ ├── CMakeLists.txt
│ [..]
├── stubs
│ ├── CMakeLists.txt
│ [..]
├── unittests
│ ├── CMakeLists.txt
│ [..]
├── x86_64.cmake
└── x86.cmake
的相关位TESTS/CMakeLists.txt
:
include(CTestConfig.cmake)
include(CTest)
#include(CTestUseLaunchers)
#enable_testing()
add_test(NAME Test1 COMMAND ${PROJECT_NAME})
CTestConfig.cmake
:
set(CTEST_PROJECT_NAME "ProjectTest1")
set(CTEST_USE_LAUNCHERS YES)
CTest 脚本TestValgrindJob64.cmake
- 注意打印出MEMORYCHECK_COMMAND
、CTEST_SCRIPT_DIRECTORY
和CTEST_SOURCE_DIRECTORY
的4 条消息CTEST_BINARY_DIRECTORY
:
include(${CTEST_SCRIPT_DIRECTORY}/../CTestConfig.cmake)
message("MEMORYCHECK_COMMAND ${MEMORYCHECK_COMMAND}")
message("CTEST_SCRIPT_DIRECTORY ${CTEST_SCRIPT_DIRECTORY}")
site_name(CTEST_SITE)
set(CTEST_BUILD_CONFIGURATION "Valgrind64")
set(CTEST_BUILD_NAME "${CMAKE_HOST_SYSTEM_NAME}-Val64")
set(CTEST_SOURCE_DIRECTORY "${CTEST_SCRIPT_DIRECTORY}/..")
message("CTEST_SOURCE_DIRECTORY ${CTEST_SOURCE_DIRECTORY}")
set(CTEST_BINARY_DIRECTORY "${CTEST_SCRIPT_DIRECTORY}/../build/x86_64")
message("CTEST_BINARY_DIRECTORY ${CTEST_BINARY_DIRECTORY}")
set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
set(CTEST_CONFIGURATION_TYPE RelWithDebInfo)
#set(CTEST_MEMORYCHECK_COMMAND "/usr/bin/valgrind")
set(CTEST_MEMORYCHECK_COMMAND_OPTIONS "--tool=memcheck --leak-check=full --show-reachable=yes --num-callers=20 --track-fds=yes --track-origins=yes --error-exitcode=1")
set(configureOpts "-DCXXFLAGS=-m64")
ctest_empty_binary_directory(${CTEST_BINARY_DIRECTORY})
ctest_start(Experimental)
ctest_configure(OPTIONS "${configureOpts}")
ctest_build()
ctest_memcheck()
如果我尝试从TESTS/ctest_scripts
with执行脚本,ctest -S TestValgrindJob64.cmake
我会得到以下输出:
MEMORYCHECK_COMMAND
CTEST_SCRIPT_DIRECTORY /home/user1/project/TESTS/ctest_scripts
CTEST_SOURCE_DIRECTORY /home/user1/project/TESTS/ctest_scripts/..
CTEST_BINARY_DIRECTORY /home/user1/project/TESTS/ctest_scrips/../build/x86_64
Each . represents 1024 bytes of output
. Size of output: 0K
Each symbol represents 1024 bytes of output.
.. Size of output: 1K
Error(s) when building project
Memory checker (MemoryCheckCommand) not set, or cannot find the specified program.
DartConfiguration.tcl
文件在脚本执行之前和之后存在,并且如前所述,MemoryCheckCommand
设置为:
MemoryCheckCommand: /usr/bin/valgrind
whereis
在. valgrind
_/usr/bin/valgrind
知道我在这里做错了什么吗?CMake 仍然忽略 DartConfiguration.tcl
文件吗?