我有類似的結構像這樣的項目使清潔規則:添加* .gcno和* .gcda文件使用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_directories (${PROJECT_SOURCE_DIR}/src)
add_library (logic SHARED ${Logic_SOURCES})
add_subdirectory (test)
而且CMakeLists.txt
進行測試是:
find_package (GTest)
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")
set (Test_SOURCES ${Logic_SOURCES} ${PROJECT_SOURCE_DIR}/test/logic_test.cpp)
add_executable (logic_test ${Test_SOURCES})
target_link_libraries (${TestName} gtest gtest_main gcov pthread)
對於處理測試覆蓋率報告,我已經添加了cust OM目標爲test/CMakeLists.txt
:
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})
所有這些代碼工作正確的,符合市場預期。工作流程是這樣的:
mkdir build
cd build
cmake ..
make
./test/logictest
make coverage
但現在我想補充的測試覆蓋率文物的make clean
規則。我曾嘗試這個代碼添加到test/CMakeLists.txt
:
file (GLOB_RECURSE Test_GCNOS ${PROJECT_BINARY_DIR}/*.gcno)
file (GLOB_RECURSE Test_GCDAS ${PROJECT_BINARY_DIR}/*.gcda)
list (APPEND Test_COVERAGE_DATA "${Coverage_REPORT}")
list (APPEND Test_COVERAGE_DATA "${Coverage_DIR}")
list (APPEND Test_COVERAGE_DATA "${Coverage_GCNO}")
list (APPEND Test_COVERAGE_DATA "${Coverage_GCDA}")
set_directory_properties (PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${Test_COVERAGE_DATA}")
但預期(對我來說)這種方法是行不通的。當致電cmake ..
artifatcs尚不存在時,變量Coverage_DATA
爲空,因此運行測試後需要調用cmake ..
。這看起來很醜(對我來說)。
所以我的問題是:如何將測試覆蓋率的工件添加到make clean
規則?
你不應該更新你的問題,幷包括它的答案。相反,您可以爲自己的問題添加答案。使事情變得更加清晰(你甚至會爲此得到一個徽章)。 – Joakim 2015-01-23 17:27:54