首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CTest在生成<target>之后生成gcov.tar并将其提交给CDash

CTest在生成<target>之后生成gcov.tar并将其提交给CDash
EN

Stack Overflow用户
提问于 2016-09-07 16:12:17
回答 1查看 993关注 0票数 7

我已经在本地机器上设置了CDash,并使用CTest将测试结果上传到CDash生成的..gcov文件中,其中包含分支覆盖率信息并预先打包到gcov.tar中(这是https://blog.kitware.com/additional-coverage-features-in-cdash/示例的修改版本):

CMakeLists.txt:

代码语言:javascript
复制
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模块路径中:

代码语言:javascript
复制
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:

代码语言:javascript
复制
## 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:

代码语言:javascript
复制
# 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从示例中调用脚本时,它可以工作:

代码语言:javascript
复制
ctest -V -S run_example.cmake

这给了我很好的CDash分支覆盖信息。然而,这并不是:

代码语言:javascript
复制
make Experimental

它最后说:

代码语言:javascript
复制
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.

我猜这与我需要给cdash_upload.cmake的路径/env vars有关,当我使用-DCTEST_SOURCE_DIRECTORY at add_custom_command in BranchCoverage.cmake时,CDash返回一个“坏的HTTP响应”,但没有给出我应该修复的内容和位置。

你们知道吗?提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2020-12-23 08:38:22

你得到了

代码语言:javascript
复制
file STRINGS file "/CMakeFiles/TargetDirectories.txt" cannot be read.

因为在此函数中调用:

代码语言:javascript
复制
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

应该将其设置为项目的build目录,否则就不应该使用

代码语言:javascript
复制
"/CMakeFiles/TargetDirectories.txt"

小象:

代码语言:javascript
复制
"build/Debug/CMakeFiles/TargetDirectories.txt"

一旦设置好,一切都应该正常工作。

您可以查找如何使用这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39374827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档