我在一臺linux機器上,試圖使用cmake構建一個項目,這個項目沒有源代碼版本。對於代碼覆蓋範圍,我查看了gcov,並且遵循了一個簡單的教程,爲示例helloWorld.cpp
程序生成適當的文件。唯一的要求是編譯-fprofile-arcs -ftest-coverage
標誌&鏈接-lgcov
標誌,這可以完全用-coverage
標誌完成。用cmake配置代碼覆蓋範圍
現在來棘手的部分。我有一個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.gcda
& test.cpp.gcno
。
我已經嘗試複製test/test.cpp
到build/CMakeFiles/runTest.dir/test
和運行gcov test.cpp
但它沒有說明 - test.gcno:cannot open notes file
我推這個問題的更新CMakeLists.txt [這裏](https://github.com/agauniyal/rang)。任何人都可以使用這個回購快速repro。 –
當源文件和gcov數據文件('.gcno','.gcda')位於*不同*目錄中時,您需要提示'gcov'在哪裏可以找到它們。例如,您可以將選項'-o'傳遞給gcov以指定數據文件的位置。在您的問題中描述的其他所有內容都能正常工作 –
Tsyvarev
可能的複製http://stackoverflow.com/questions/13116488/detailed-guide-on-using-gcov-with-cmake-cdash也檢查文檔在這裏https://cmake.org/cmake/help/v3.2/模塊/ CTestCoverageCollectGCOV.html –