Abh*_*yal 5 c++ linux code-coverage cmake gcov
我在一台 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})
Run Code Online (Sandbox Code Playgroud)
因此,我也包含了适当的编译时标志以及链接器标志,并正确附加了它们。另一件事要注意的是set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
line 表示将在bin
目录中生成可执行文件。
现在,除了未正确生成覆盖文件之外,一切都按预期工作。我按照以下步骤操作:
mkdir build && cd build
cmake ..
make -j4
./bin/runTest
Run Code Online (Sandbox Code Playgroud)
文件bin
夹内没有生成其他文件。然而,经过更多检查,我发现最初和最后一步之后还有另一个位置build/CMakeFiles/runTest.dir/test
,生成了两个新文件 - & 。test.cpp.o
./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
,与 for 相同g++
,但gcov
in$PATH
仍然指向旧版本的gcov
.
归档时间: |
|
查看次数: |
8074 次 |
最近记录: |