2016-03-21 12 views
5

Tôi đang sử dụng máy linux, cố gắng xây dựng một dự án bằng cách sử dụng lệnh cmake không hoạt động. Đối với phạm vi mã, tôi nhìn vào gcov và theo một hướng dẫn đơn giản tạo ra các tệp thích hợp cho một chương trình mẫu helloWorld.cpp. Yêu cầu duy nhất là biên dịch với -fprofile-arcs -ftest-coverage cờ & liên kết với cờ -lgcov, có thể được thực hiện hoàn toàn với cờ -coverage.định cấu hình mã vùng phủ sóng bằng cmake

Bây giờ ở đây có phần khó khăn. Tôi có một CMakeLists.txt nội dung hóm hỉnh như hình dưới đây:

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}) 

Vì vậy, tôi đã bao gồm cờ thời gian biên dịch thích hợp cũng như cờ mối liên kết quá và nối chúng một cách chính xác. Một điều cần lưu ý là set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) dòng cho biết rằng các tệp thi hành sẽ được tạo bên trong thư mục bin.

Hiện tại, mọi thứ hoạt động như dự định ngoại trừ các tệp phủ sóng không được tạo đúng cách. Tôi làm theo các bước sau:

mkdir build && cd build 
cmake .. 
make -j4 
./bin/runTest 

và không có tập tin khác được tạo ra bên trong bin thư mục. Tuy nhiên về thanh tra tôi càng phát hiện ra rằng có một vị trí build/CMakeFiles/runTest.dir/test nơi test.cpp.o cư trú ban đầu và sau khi bước cuối cùng ./bin/runTest, hai tập tin mới - test.cpp.gcda & test.cpp.gcno được tạo ra.

Tôi đã cố gắng sao chép test/test.cpp để build/CMakeFiles/runTest.dir/test và chạy gcov test.cpp nhưng nó vẫn thất bại nêu - test.gcno:cannot open notes file

+0

Tôi đã đẩy CMakeLists.txt đã cập nhật cho câu hỏi này [tại đây] (https://github.com/agauniyal/rang). bất cứ ai cũng có thể sử dụng repo này để repro nhanh chóng. –

+3

Khi tệp nguồn và tệp dữ liệu gcov ('.gcno',' .gcda') được đặt trong * thư mục * khác nhau, bạn cần gợi ý 'gcov' nơi có thể tìm thấy chúng. Ví dụ: bạn có thể chuyển tùy chọn '-o ' vào gcov để chỉ định vị trí của tệp dữ liệu. Mọi thứ khác được mô tả trong bài đăng câu hỏi của bạn đều hoạt động chính xác. – Tsyvarev

+1

dup có thể http://stackoverflow.com/questions/13116488/detailed-guide-on-using-gcov-with-cmake-cdash cũng kiểm tra tài liệu tại đây https://cmake.org/cmake/help/v3.2/ module/CTestCoverageCollectGCOV.html –

Trả lời

3

Một không phù hợp trong gcov và phiên bản gcc đã làm điều này xảy ra. gcc liên kết tượng trưng /usr/bin/gcc được đặt thành mới nhất gcc, tương tự cho g++ nhưng gcov trong $PATH vẫn trỏ đến phiên bản cũ hơn gcov.

Các vấn đề liên quan