c语言gcno文件位置,添加* .gcno和* .gcda文件使用CMake的

这不能称为优雅的解决方案,但在我看来,它是更好,然后cmake回忆。 我试图创建的宏,其通过源文件的列表确定覆盖文物(*.gcno和*.gcda文件)的名称:

macro (determine_coverage_data Sources TestName Artifacts Suffix)

set (CoverageDirectory "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${TestName}.dir")

foreach (File ${Sources})

string (REGEX MATCH "^${CMAKE_CURRENT_SOURCE_DIR}*" Directory "${File}")

if (Directory STREQUAL CMAKE_CURRENT_SOURCE_DIR)

string (REGEX REPLACE "^${CMAKE_CURRENT_SOURCE_DIR}*" "${CoverageDirectory}" File "${File}")

else (Directory STREQUAL CMAKE_CURRENT_SOURCE_DIR)

string (REGEX REPLACE "/" ";" A "${CMAKE_CURRENT_SOURCE_DIR}")

string (REGEX REPLACE "/" ";" B "${File}")

list (LENGTH A DeepDirectory)

list (LENGTH B DeepFile)

set (File "${CoverageDirectory}")

set (I 1)

while (I LESS DeepDirectory)

list (GET A ${I} AI)

list (GET B ${I} BI)

if (AI STREQUAL BI)

math (EXPR I "${I} + 1")

else (AI STREQUAL BI)

math (EXPR DeepDiff "${DeepFile} - ${I} - 1")

while (DeepDiff GREATER 0)

set (File "${File}/__")

math (EXPR DeepDiff "${DeepDiff} - 1")

endwhile (DeepDiff GREATER 0)

while (I LESS DeepFile)

list (GET B ${I} BI)

set (File "${File}/${BI}")

math (EXPR I "${I} + 1")

endwhile (I LESS DeepFile)

endif (AI STREQUAL BI)

endwhile (I LESS DeepDirectory)

endif (Directory STREQUAL CMAKE_CURRENT_SOURCE_DIR)

set (${Artifacts} ${${Artifacts}} "${File}${Suffix}")

endforeach (File)

endmacro (determine_coverage_data)

所以,完整的解决方案是看起来像:

├── cmake

│   └── UseGCov.cmake

├── CMakeLists.txt

├── src

│   ├── logic.cpp

│   └── logic.h

└── test

├── CMakeLists.txt

└── logic_test.cpp

主要CMakeLists.txt文件是:

cmake_minimum_required (VERSION 2.8)

project (Logic)

set (Logic_SOURCES ${PROJECT_SOURCE_DIR}/src/logic.cpp)

# Include macro.

include ("${PROJECT_SOURCE_DIR}/cmake/UseGCov.cmake")

include_directories (${PROJECT_SOURCE_DIR}/src)

add_library (logic SHARED ${Logic_SOURCES})

add_subdirectory (test)

而且CMakeLists.txt的测试是:

find_package (GTest)

set (Test_SOURCES ${Logic_SOURCES} ${PROJECT_SOURCE_DIR}/test/logic_test.cpp)

set (TestName logic_test)

set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g -march=native -mtune=native -fprofile-arcs -ftest-coverage")

set (CMAKE_EXE_LINKER_FLAGS "-fprofile-arcs -ftest-coverage")

# Call macro.

determine_coverage_data ("${Test_SOURCES}" "${TestName}" Test_GCNOS ".gcno")

determine_coverage_data ("${Test_SOURCES}" "${TestName}" Test_GCDAS ".gcda")

set (Coverage_REPORT ${PROJECT_BINARY_DIR}/coverage.info)

set (Coverage_DIR ${PROJECT_BINARY_DIR}/coverage)

add_custom_command (

OUTPUT ${Coverage_REPORT}

COMMAND lcov -q -c -f -b . -d ${PROJECT_BINARY_DIR}/test -o ${Coverage_REPORT}

COMMAND lcov -e ${Coverage_REPORT} '${PROJECT_SOURCE_DIR}/src/*' -o ${Coverage_REPORT}

COMMAND genhtml ${Coverage_REPORT} --legend --demangle-cpp -f -q -o ${Coverage_DIR}

DEPENDS logic_test

)

add_custom_target (coverage DEPENDS ${Coverage_REPORT})

set (Test_COVERAGE_DATA ${Coverage_REPORT} ${Coverage_DIR} ${Test_GCNOS} ${Test_GCDAS})

set_directory_properties (PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${Test_COVERAGE_DATA}")

add_executable (${TestName} ${Test_SOURCES})

target_link_libraries (${TestName} gtest gtest_main gcov pthread)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值