使用 CMAKE 配置代码覆盖率
configuring code coverage with cmake
我在一台 Linux 机器上,试图使用 cmake 构建一个项目,该项目不会从源代码构建。对于代码覆盖率,我研究了 gcov 并遵循了一个简单的教程,该教程为示例helloWorld.cpp
程序生成适当的文件。唯一的要求是使用 -fprofile-arcs -ftest-coverage
标志编译并使用-lgcov
标志链接,这可以完全使用 -coverage
标志来完成。
现在棘手的部分来了。我有一个CMakeLists.txt
机智的内容,如下所示:
cmake_minimum_required (VERSION 2.8)
project (SomeName)
SET(GCC_COVERAGE_COMPILE_FLAGS "-g -O0 -coverage -fprofile-arcs -ftest-coverage")
SET(GCC_COVERAGE_LINK_FLAGS "-coverage -lgcov")
SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}" )
SET( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}" )
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
include_directories(include)
set(CATCH_HEADER_PATH ${PROJECT_SOURCE_DIR}/test/catch.hpp)
add_executable(runTest ${PROJECT_SOURCE_DIR}/test/test.cpp ${CATCH_HEADER_PATH})
因此,我也包含了适当的编译时标志以及链接器标志,并正确附加了它们。另一件需要注意的事情是set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
行,它说可执行文件将在目录中生成bin
。
现在一切都按预期工作,除了覆盖文件未正确生成。我遵循以下步骤:
mkdir build && cd build
cmake ..
make -j4
./bin/runTest
并且bin
文件夹中不会生成其他文件。然而,在更多的检查中,我发现test.cpp.o
最初驻留的另一个位置build/CMakeFiles/runTest.dir/test
,在最后一步./bin/runTest
之后,生成两个新文件 - test.cpp.gcda
和test.cpp.gcno
。
我已经尝试将test/test.cpp
复制到build/CMakeFiles/runTest.dir/test
并运行gcov test.cpp
但它无法说明 - test.gcno:cannot open notes file
gcov 和 gcc 版本中的不匹配使这种情况发生。 gcc
符号链接/usr/bin/gcc
被设置为最新的gcc
,与g++
相同,但gcov
在$PATH
仍然指向旧版本的gcov
。
- Visual Studio 为新的初始值设定项提供了部分代码覆盖率
- 有什么方法可以从Visual Studio 2017中的Catch C++测试中获取代码覆盖率指标?
- 如何使用Visual Studio检测和获取Windows服务的代码覆盖率?
- Visual Studio 2017 Community with C++的代码覆盖率
- TeamCity中的Visual Studio企业代码覆盖率报告
- 使用MinGW的Qt Creator中的代码覆盖率
- 某些代码不会从代码覆盖率中删除
- 运行gcovr命令后,无法生成代码覆盖率,也无法从子目录中删除.gcda
- 使用 Gcovr 的多个文件的代码覆盖率
- 在堆栈中创建对象时,即使代码覆盖率为100%,函数覆盖率也较小
- C 代码 - 覆盖率(或其他静态代码分析仪) 线程安全
- 代码覆盖率优化
- 具有专有测试自动化功能的Windows代码覆盖率
- C++库的代码覆盖率不会突出显示所有行
- 使用 CMAKE 配置代码覆盖率
- 在代码中配置 MSVC 调试器::块
- Windows 中守护程序的代码覆盖率
- Visual Studio 2015 代码覆盖率错误文件
- Visual Studio 2012 C++代码覆盖率合并可执行文件
- 如何使此串行配置代码可配置