相关疑难解决方法(0)

有关使用CMK/CDash的gcov的详细指南?

我在我的项目中使用CMake并设置了一个用于连续/夜间构建的cdash服务器.一切运作良好,通过设置crontab,我们将每小时/每晚的构建/测试结果自动上传到我们的cdash服务器.

我的下一步是将测试覆盖率报告添加到构建中.我在http://www.cmake.org/Wiki/CTest:Coverage找到了这份文件,但坦率地说,它与实用指南相差甚远.

目前我已经添加了所需的标志(而不是-fprofile-arcs -ftest-coverage,我发现--coverage更好),编译过程生成.gcno文件.但后来我被卡住了.命令

make NightlyCoverage
Run Code Online (Sandbox Code Playgroud)

好像什么也没做.谁能告诉我接下来要做什么?我想要的结果是make NightlyCoverage,生成覆盖率报告并上传到cdash服务器.

c++ testing code-coverage cmake cdash

48
推荐指数
4
解决办法
2万
查看次数

如何在使用cmake构建项目后运行ctest

我希望每次成功构建项目时都会启动测试.如果某些测试被破坏,我希望我的构建也被打破.默认情况下,我需要通过运行ctest命令手动运行测试.CTest实际上可以构建项目,但我使用调用make来构建源代码的IDE .而且make不会运行测试.

我将此命令添加到我的根CMakeLists.txt文件,但它不起作用.

add_custom_command(OUTPUT tests.txt 
                   POST_BUILD
                   COMMAND ctest --output-on-failure)
Run Code Online (Sandbox Code Playgroud)

CMake不会返回任何错误,一切都很好,但我的自定义命令不会调用.如何在CMake中每次成功构建后运行一些东西?

更新:

我的最终解决方案是这个功能:

macro(add_unit_test target target_test)
    set(UNIT_TEST_TARGETS ${UNIT_TEST_TARGETS} ${target_test} PARENT_SCOPE)
    add_test(target ${CMAKE_CURRENT_BINARY_DIR}/${target_test})
endmacro(add_unit_test)
Run Code Online (Sandbox Code Playgroud)

它调用add_test并记住列表中的测试目标.此功能添加的项目中的每个测试.在根CMakeLists.txt我有这个代码:

add_custom_target( all_tests ALL
                   DEPENDS ${UNIT_TEST_TARGETS}
)
add_custom_command(TARGET all_tests
                   COMMENT "Run tests"
                   POST_BUILD COMMAND ctest ARGS --output-on-failure
                   WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
Run Code Online (Sandbox Code Playgroud)

它创建依赖于项目中所有单元测试的自定义目标.自定义命令all_tests在构建目标后运行.

cmake ctest

21
推荐指数
1
解决办法
1万
查看次数

标签 统计

cmake ×2

c++ ×1

cdash ×1

code-coverage ×1

ctest ×1

testing ×1