2012-05-18 27 views
6

Tôi đang tìm cách tích hợp một hệ thống xây dựng đa nền tảng không tầm thường cho một dự án được viết chủ yếu bằng C++. Tôi đã đánh giá Cmake và Scons, cho đến nay, và trong khi cả hai đều đại diện cho một cải tiến hơn (GNU), nhưng cách tiếp cận dường như không thanh lịch hoặc trong suốt trong bối cảnh tôi đã cố gắng sử dụng những công cụ này. Điều này đã đưa tôi đến với Boost Build (Bjam) và tôi được khuyến khích rằng, với dự án của tôi phụ thuộc vào Boost, bjam sẽ có sẵn cho bất kỳ nền tảng mục tiêu khả thi nào rồi.Bjam để phân tích bảo hiểm gcov?

Tôi đã gặp khó khăn khi cố gắng tích hợp gọn gàng mã vùng phủ sóng cho các bài kiểm tra đơn vị của thư viện ... với chế độ xem để tích hợp cuối cùng vào máy chủ xây dựng như Jenkins. Trong khi tôi đang sẵn sàng để được hướng dẫn bởi bjam thực hành tốt nhất/tiêu chuẩn, tôi nghĩ tôi cần ba khác biệt "biến thể":

  • phát hành - để xây dựng thư viện tĩnh tối ưu hóa chỉ
  • debug - để xây dựng không được tối ưu hóa tĩnh kiểm tra thư viện và đơn vị
  • mức độ phù hợp - để xây dựng thư viện hỗ trợ bảo hiểm và liên kết với các thử nghiệm đơn vị được hỗ trợ không được bảo hiểm.

Về bản chất, ngoài các bản dựng gỡ lỗi và bản phát hành chuẩn, tôi muốn có một bản dựng gỡ lỗi mục đích đặc biệt cũng thu thập dữ liệu bảo hiểm.

Tôi cần phải xây dựng với (ít nhất) g ++ và msvc ... và chỉ sử dụng gcov chuyển đổi bằng g ++. Điều này có nghĩa là mục tiêu thư viện của tôi cần "compilerflags" khác nhau cho mục tiêu thực thi kiểm thử đơn vị ... và chỉ cho một trong các bộ biên dịch của tôi ... và chỉ cho một biến thể.

Tôi không rõ làm thế nào tốt nhất để đạt được điều này với Bjam - mặc dù, tôi nghi ngờ, nó phải là một trường hợp sử dụng khá phổ biến. Bjam có hỗ trợ rõ ràng cho phân tích bảo hiểm gcov (có thể trình bày kết quả sử dụng lcov) không? Nếu không, bất cứ ai có thể đề nghị một chiến lược mà sẽ hỗ trợ các kịch bản trên (đơn giản)?

Trả lời

1

Tôi khá tự tin rằng câu trả lời cho câu hỏi đầu tiên của bạn - cho dù bjam đã hỗ trợ rõ ràng cho gcov - là một định không, bởi vì như gỡ lỗi và phát hành xây dựng cấu hình, bjam sẽ xem xét rằng để trở thành một feature variant để người dùng xác định.

Đối bjam, có vẻ như có một vài cách để làm những gì bạn muốn:

  1. Define your own feature variant và sau đó cập nhật CONFIG_COMMAND cho bất kỳ cờ tùy chỉnh.

  2. Define/redefine a toolset.

Đối với CMake, hãy xem xét sau đây mô hình mà ITK làm:

http://cmake.org/Wiki/ITK/Policy_and_Procedure_for_Adding_Dashboards#Configuring_GCOV_Coverage

+0

Cảm ơn những con trỏ ...Tôi thà hy vọng rằng tôi sẽ tìm thấy một mẫu mà, ít nhất, làm việc đúng với gcc/gcov ... – aSteve

1

Tôi có nhu cầu tương tự và tôi về cơ bản thêm các dòng dưới đây để xác định biến vùng phủ sóng của riêng tôi trong tập tin Jamroot tôi.

variant coverage : debug : <cxxflags>--profile-arcs <cxxflags>--test-coverage <cxxflags>--coverage <link>shared ; 
lib gcov : : <name>gcov : ; 

unit-test mytest : tests/mytest.cpp libboost_unit_test : <variant>coverage:<library>gcov ; 

Dữ liệu bảo hiểm được tạo khi chạy thử và sau đó tôi khai thác nó sau bjam bằng gcov.

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