0

当我尝试执行我的 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_COMMANDCTEST_SCRIPT_DIRECTORYCTEST_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_scriptswith执行脚本,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文件吗?

4

0 回答 0