CTest генерирует и отправляет gcov.tar в CDash после make <target>
Я установил CDash на своем локальном компьютере и использую CTest для загрузки результатов тестирования на CDash - генерирую.gcov-файлы, содержащие информацию о Branch Coverage, и предварительно упаковываю их в gcov.tar (это модифицированная версия примера из https://blog.kitware.com/additional-coverage-features-in-cdash/):
CMakeLists.txt:
cmake_minimum_required(VERSION 3.2)
project(branch_coverage_example)
add_executable(foo foo.cxx)
include(CTest)
add_test(NAME foo COMMAND foo)
include(BranchCoverage)
BranchCoverage.cmake в пути моего модуля CMake:
if(${CMAKE_BUILD_TYPE} STREQUAL "Profiling")
option(ALWAYS_GENERATE_BRANCH_COVERAGE_INFO "Run gcov branch coverage as part of the ALL target" ON)
if(ALWAYS_GENERATE_BRANCH_COVERAGE_INFO)
add_custom_target(BranchCoverage)
add_custom_command(TARGET BranchCoverage
POST_BUILD
COMMAND ${CMAKE_CTEST_COMMAND} -D ExperimentalSubmit -S cdash_tarball.cmake
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "Generating gcov.tar containing branch coverage info..."
)
add_dependencies(BranchCoverage Experimental)
endif()
endif()
CTestConfig.cmake:
## This file should be placed in the root directory of your project.
## Then modify the CMakeLists.txt file in the root directory of your
## project to incorporate the testing dashboard.
##
## # The following are required to submit to the CDash dashboard:
## ENABLE_TESTING()
## INCLUDE(CTest)
set(CTEST_PROJECT_NAME "BranchCoverageExample")
set(CTEST_NIGHTLY_START_TIME "01:00:00 UTC")
set(CTEST_DROP_METHOD "http")
set(CTEST_DROP_SITE "localhost")
set(CTEST_DROP_LOCATION "/CDash/public/submit.php?project=BranchCoverageExample")
set(CTEST_DROP_SITE_CDASH TRUE)
cdash_upload.cmake:
# start, configure, build, test, coverage and submit
# have been executed by make <target> beforehand!
# generate a GCOV tarball and upload it to CDash.
include(CTestCoverageCollectGCOV)
ctest_coverage_collect_gcov(
TARBALL gcov.tar
SOURCE ${CTEST_SOURCE_DIRECTORY}
BUILD ${CTEST_BINARY_DIRECTORY}
GCOV_COMMAND ${CTEST_COVERAGE_COMMAND}
GCOV_OPTIONS -l -p -b
)
if(EXISTS "${CTEST_BINARY_DIRECTORY}/gcov.tar")
ctest_submit(CDASH_UPLOAD "${CTEST_BINARY_DIRECTORY}/gcov.tar"
CDASH_UPLOAD_TYPE GcovTar)
endif()
Это работает, когда я вызываю скрипт из примера, используя ctest напрямую:
ctest -V -S run_example.cmake
Это дает мне прекрасную информацию о ветке в CDash. Однако это не так:
make Experimental
В итоге он говорит:
Generating gcov.tar containing branch coverage info...
CMake Error at /usr/local/share/cmake-3.6/Modules/CTestCoverageCollectGCOV.cmake:118 (file):
file STRINGS file "/CMakeFiles/TargetDirectories.txt" cannot be read.
Call Stack (most recent call first):
cdash_tarball.cmake:2 (ctest_coverage_collect_gcov)
ctest_coverage_collect_gcov: No .gcda files found, ignoring coverage request.
Я предполагаю, что это как-то связано с путями / env-переменными, которые мне нужно дать cdash_upload.cmake, когда я делаю это с помощью -DCTEST_SOURCE_DIRECTORY в add_custom_command в BranchCoverage.cmake, CDash возвращает "неправильный HTTP-ответ", но не дает мне Любой признак того, что я должен исправить и где.
Ребята, у вас есть идеи? Заранее спасибо!
1 ответ
Вы получаете
file STRINGS file "/CMakeFiles/TargetDirectories.txt" cannot be read.
Потому что в этом вызове функции:
ctest_coverage_collect_gcov(
TARBALL gcov.tar
SOURCE ${CTEST_SOURCE_DIRECTORY}
BUILD ${CTEST_BINARY_DIRECTORY}
GCOV_COMMAND ${CTEST_COVERAGE_COMMAND}
GCOV_OPTIONS -l -p -b
)
CTEST_BINARY_DIRECTORY
не определено,
он должен быть установлен в каталог сборки вашего проекта, и оказывается, что это не так, иначе вы должны получить вместо
"/CMakeFiles/TargetDirectories.txt"
что-то вроде:
"build/Debug/CMakeFiles/TargetDirectories.txt"
После установки все должно работать нормально.
Вы можете посмотреть, как используется здесь