2012-05-18 5 views
6

저는 주로 C++로 작성된 프로젝트를 위해 사소한 크로스 플랫폼 빌드 시스템을 통합하려고합니다. 지금까지 Cmake와 Scons를 평가 해 보았습니다. 둘 다 GNU를 개선 한 것으로 나타 났지만이 도구를 사용하려고 시도한 컨텍스트에서 어느 방식도 우아하거나 투명하게 보이지 않았습니다. 이로 인해 Boost Build (Bjam)가 생겼고, 내 프로젝트가 Boost에 종속되어 있다면 bjam이 실행 가능한 대상 플랫폼 에 대해 이미 제공되어야한다고 권장합니다.gcov coverage 분석을위한 Bjam?

저는 Jenkins와 같은 빌드 서버에 최종 통합하기 위해 라이브러리의 단위 테스트를위한 코드 커버리지를 깔끔하게 통합하는 데 어려움을 겪었습니다. - 단지

  • 디버그 최적화 된 정적 라이브러리를 구축 - 정적 비는 최적화 구축

    • 자료 : 나는 Bjam 최고/표준 관행에 의해 인도 될 기꺼이 동안, 나는 세 가지 "변종을"필요가 있다고 생각 라이브러리 및 유닛 테스트
    • 커버리지 - 커버리지가 가능한 라이브러리를 빌드하고 커버리지가 지원되지 않는 유닛 테스트와 링크.

    기본적으로 표준 디버그 및 릴리스 빌드 외에도 특수 데이터 디버그 빌드를 사용하여 적용 범위 데이터를 수집하고 싶습니다.

    (적어도) g ++ 및 msvc ...로 빌드해야하고 g ++와 함께 gcov 스위치 만 사용해야합니다. 이는 내 라이브러리 타겟이 유닛 테스트 실행 파일 타겟과 다른 "컴파일러 플래그"를 필요로한다는 것을 의미하고, 컴파일러 스위트 중 하나만을 위해 ... 그리고 한 가지 변형을 위해서만 필요합니다.

    Bjam을 사용하여이 작업을 수행하는 것이 가장 좋은 방법인지는 분명하지 않지만 상당히 일반적인 사용 사례 여야합니다. Bjam은 gcov coverage 분석을 명시 적으로 지원합니까 (lcov를 사용하여 결과 표시 가능)? 그렇지 않은 경우 위의 (단순화 된) 시나리오를 지원하는 전략을 누군가에게 추천 할 수 있습니까? bjam는 gcov를 위해 명시 적으로 지원이 있는지 여부 - -

  • 답변

    1

    내가 첫 번째 질문에 대한 대답은 꽤 확신 때문에 디버그처럼 명확한 없습니다 및 구성을 구축 해제, bjam는이 feature variant으로 고려할 것 사용자가 정의 할 수 있습니다.

    1. Define your own feature variant 다음 사용자 지정 플래그에 대한 CONFIG_COMMAND 업데이트 : 당신이 원하는 것을 할 수있는 몇 가지 방법이있는 것처럼 bjam를 들어

      , 그것은 보인다.

    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 외부에서 악용됩니다.