gpt4 book ai didi

c++ - 使用 cmake 配置代码覆盖率

转载 作者:IT王子 更新时间:2023-10-29 00:39:01 24 4
gpt4 key购买 nike

我在一台 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 文件夹中没有生成其他文件。然而,在更多检查中,我发现还有另一个位置 build/CMakeFiles/runTest.dir/test 其中 test.cpp.o 最初驻留在最后一步 ./bin/runTest 之后,生成了两个新文件 - test.cpp.gcdatest.cpp.gcno

我已经尝试将 test/test.cpp 复制到 build/CMakeFiles/runTest.dir/test 并运行 gcov test.cpp 但它没有说明 - test.gcno:cannot open notes file

最佳答案

gcov 和 gcc 版本不匹配导致了这种情况。 gcc 符号链接(symbolic link) /usr/bin/gcc 设置为最新的 gcc,与 g++ 相同,但 gcov $PATH 中的 仍然指向旧版本的 gcov

关于c++ - 使用 cmake 配置代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36123469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com