2012-05-18 77 views
6

我期待爲主要用C++編寫的項目集成一個不平凡的跨平臺構建系統。到目前爲止,我已經對Cmake和Scons進行了評估,雖然它們都代表了對GNU make的改進,但在我試圖使用這些工具的情況下,這兩種方法都不是優雅或透明的。這使我進入了Boost Build(Bjam),我感到鼓舞的是,鑑於我的項目依賴Boost,bjam應該已經可用於任何可行的目標平臺 。Bjam用於gcov覆蓋率分析?

我遇到了困難,試圖整齊地整合庫的單元測試的代碼覆蓋範圍......以便最終集成到構建服務器(如Jenkins)中。雖然我願意用最好的bjam /標準實踐的指導,我想我需要三個不同「變種」:

  • 釋放 - 建立優化的靜態庫只
  • 調試 - 建立非優化靜態庫和單元測試
  • 覆蓋 - 構建啓用覆蓋的庫並鏈接到未啓用覆蓋的單元測試。

本質上,除了標準的調試和發佈版本之外,我還想要一個特殊目的的調試版本來收集覆蓋數據。

我需要建立(至少)g ++和msvc ...並僅使用g ++的gcov開關。這意味着我的庫目標需要與單元測試可執行目標不同的「編譯器標誌」......並且僅適用於我的一個編譯器套件......並且僅適用於一個變體。

我不清楚Bjam如何最好地實現這一點 - 儘管我懷疑它應該是一個相當常見的用例。 Bjam是否明確支持gcov覆蓋分析(可能使用lcov呈現結果 )?如果沒有,任何人都可以推薦一個支持上述(簡化)場景的策略嗎?

回答

1

我敢確信回答你的第一個問題 - 的bjam是否具有gcov的明確支持 - 是一個明確的沒有,因爲像調試和發佈版本的配置,會的bjam認爲這是一個feature variant供用戶定義。

對於bjam的,它看起來像有幾個方法可以做到你想要什麼:

  1. Define your own feature variant,然後更新任何自定義標記的CONFIG_COMMAND。

  2. Define/redefine a toolset

對於CMake的,考慮以下是ITK確實模式:

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

+0

感謝這些指針......我寧願希望我能找到一個樣本,至少可以用gcc/gcov正確地工作...... – aSteve

1

我有同樣的需要,我基本上都添加了下面的線來定義我的Jamroot中的文件我自己的覆蓋變種。

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 ; 

覆蓋率數據是在測試運行時創建的,然後我使用gcov在bjam之外利用它。