LCOV 文件在 "SF:" 处有奇怪的路径
LCOV File has strange Paths at "SF:"
我正在使用 googletest 测试我的 cpp 应用程序,这些部分 运行 非常好。
要构建和启动单元测试,我 运行 一个小型 Powershell Skript。
cmake -G "Unix Makefiles" -S . -B ${BUILD_PATH}
cmake --build $BUILD_PATH
Set-Location $BUILD_PATH
./UnitTests
CMakeLists.txt 看起来像这样:
cmake_minimum_required(VERSION 3.14)
project(exampleProject)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_FLAGS --coverage)
# GoogleTest
include(FetchContent)
FetchContent_Declare(
googletest
URL https://github.com/google/googletest/archive/609281088cfefc76f9d0ce82e1ff6c30cc3591e5.zip
)
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
enable_testing()
# Testsources
file(GLOB_RECURSE TEST_SOURCES "./test/*.cc")
# Linking
# Add here the "inc" and "src" folder from the features
include_directories(
"./Example/inc"
"./Example/src"
"./test/Example/mock"
)
add_executable(
unittests
${TEST_SOURCES}
)
target_link_libraries(
unittests
gtest_main
gmock_main
)
include(GoogleTest)
# Run
gtest_discover_tests(unittests)
我的 .sh 脚本中的以下代码行在 MacOs 上完美运行。
lcov --directory ${TEST_SOURCE_PATH} --capture --output-file ${LCOV_PATH_INFO} -rc lcov_branch_coverage=1
我将在 Windows 机器上使用另一个 Powershell 脚本中的代码执行相同的操作:
$LCOV = "C:\ProgramData\chocolatey\lib\lcov\tools\bin\lcov"
perl $LCOV --capture --directory ${TEST_SOURCE_PATH} --output-file ${LCOV_PATH_INFO}
当我 运行 这些脚本时,.info 文件在 SF-Tag 处有 strage 路径 例如:
SF:C:\dev\exampleProject\build\test\CMakeFiles\unittests.dir\test\Example\C:/Strawberry/c/lib/gcc/x86_64-w64-mingw32/8.3.0/include/c++/ext/alloc_traits.h
Powershell 的 geninfo 告诉我他无法打开这些文件,这是合乎逻辑的。
那么为什么我变成了这些奇怪的路径?
谢谢。最好的后卫
丹尼尔
我读了很多关于这个的东西,但我没有找到解决方案。
所以我找到了一个使用 Powershell 脚本的解决方案。
- 首先我创建了一个
lcov.info
文件。
- 之后创建的文件将清除文件扩展名。
- 最后我用替换命令清理了奇怪的路径。
所以效果很好。
我正在使用 googletest 测试我的 cpp 应用程序,这些部分 运行 非常好。 要构建和启动单元测试,我 运行 一个小型 Powershell Skript。
cmake -G "Unix Makefiles" -S . -B ${BUILD_PATH}
cmake --build $BUILD_PATH
Set-Location $BUILD_PATH
./UnitTests
CMakeLists.txt 看起来像这样:
cmake_minimum_required(VERSION 3.14)
project(exampleProject)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_FLAGS --coverage)
# GoogleTest
include(FetchContent)
FetchContent_Declare(
googletest
URL https://github.com/google/googletest/archive/609281088cfefc76f9d0ce82e1ff6c30cc3591e5.zip
)
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
enable_testing()
# Testsources
file(GLOB_RECURSE TEST_SOURCES "./test/*.cc")
# Linking
# Add here the "inc" and "src" folder from the features
include_directories(
"./Example/inc"
"./Example/src"
"./test/Example/mock"
)
add_executable(
unittests
${TEST_SOURCES}
)
target_link_libraries(
unittests
gtest_main
gmock_main
)
include(GoogleTest)
# Run
gtest_discover_tests(unittests)
我的 .sh 脚本中的以下代码行在 MacOs 上完美运行。
lcov --directory ${TEST_SOURCE_PATH} --capture --output-file ${LCOV_PATH_INFO} -rc lcov_branch_coverage=1
我将在 Windows 机器上使用另一个 Powershell 脚本中的代码执行相同的操作:
$LCOV = "C:\ProgramData\chocolatey\lib\lcov\tools\bin\lcov"
perl $LCOV --capture --directory ${TEST_SOURCE_PATH} --output-file ${LCOV_PATH_INFO}
当我 运行 这些脚本时,.info 文件在 SF-Tag 处有 strage 路径 例如: SF:C:\dev\exampleProject\build\test\CMakeFiles\unittests.dir\test\Example\C:/Strawberry/c/lib/gcc/x86_64-w64-mingw32/8.3.0/include/c++/ext/alloc_traits.h
Powershell 的 geninfo 告诉我他无法打开这些文件,这是合乎逻辑的。
那么为什么我变成了这些奇怪的路径?
谢谢。最好的后卫 丹尼尔
我读了很多关于这个的东西,但我没有找到解决方案。
所以我找到了一个使用 Powershell 脚本的解决方案。
- 首先我创建了一个
lcov.info
文件。 - 之后创建的文件将清除文件扩展名。
- 最后我用替换命令清理了奇怪的路径。
所以效果很好。