버전 비교

  • 이 줄이 추가되었습니다.
  • 이 줄이 삭제되었습니다.
  • 서식이 변경되었습니다.

...

  • Build Wrapper
    Build Wrapper는 SonarSource에서 개발한 도구로, 빌드 시점에서 빌드 구성 정보를 JSON 파일로 수집합니다.
    이 도구는 C/C++/Objective-C 프로젝트의 올바른 분석을 위해 필요한 매크로 정의, include 디렉토리 등의 정보를 캡처합니다.
    Build Wrapper는 빌드 과정에 영향을 주지 않으며, 단순히 정보를 수집하여 지정된 디렉토리에 기록합니다.
  • Compilation Database
    Compilation Database는 LLVM 프로젝트에서 도입한 JSON 형식의 파일로, 프로젝트 빌드에 사용된 컴파일 명령어를 포함합니다.
    CMake, Ninja 등의 빌드 도구를 사용해 쉽게 생성할 수 있습니다.

분석 단계

빌드 래퍼(Build Wrapper)

...

모드


  1. Build Wrapper 설치
    SonarQube 서버에서 Build Wrapper를 다운로드합니다.

    • Linux: <SonarQube_URL>/static/cpp/build-wrapper-linux-x86.zip
    • macOS: <SonarQube_URL>/static/cpp/build-wrapper-macosx-x86.zip
    • Windows: <SonarQube_URL>/static/cpp/build-wrapper-win-x86.zip


  2. Build Wrapper로 클린 빌드 실행
    코드 블럭
    // example for linux
    build-wrapper-linux-x86-64 --out-dir build_wrapper_output_directory make clean all
    // example for macOS
    build-wrapper-macosx-x86 --out-dir build_wrapper_output_directory xcodebuild clean build
    // example for Windows
    build-wrapper-win-x86-64.exe --out-dir  build_wrapper_output_directory MSBuild.exe /t:Rebuild /nodeReuse:False
  3. SonarScanner 설정
    sonar-project.properties 파일을 설정하고 sonar.cfamily.build-wrapper-output 속성을 추가한다.
    코드 블럭
    sonar.projectKey=myFirstProject
    sonar.projectName=My First C++ Project
    sonar.projectVersion=1.0
    sonar.sources=src
    sonar.cfamily.build-wrapper-output=build_wrapper_output_directory
    sonar.sourceEncoding=UTF-8
    sonar.host.url=YourSonarQubeURL

  4. SonarScanner 실행
    코드 블럭
    sonar-scanner

...

참고사항
title 주의 사항
  • 파일 경로 접근: Build Wrapper는 빌드 중 수집한 절대 경로를 분석에 사용하므로, 빌드와 분석이 동일한 호스트에서 실행되어야 합니다.
    예를 들어, Docker 컨테이너에서 SonarScanner CLI 이미지를 사용할 경우 Build Wrapper는 지원되지 않습니다.

  • 보안 문제: build-wrapper-dump.json 파일에는 환경 정보가 포함되어 있어 보안상의 주의가 필요합니다.
    로그 파일(build-wrapper.log)은 분석에 필요하지 않으므로 필요 시 삭제 가능합니다.

  • Bazel: Continuous Build 환경에서는 --batch 옵션을 사용하고, Bazel의 "sandbox" 메커니즘을 비활성화해야 합니다.
    예제 명령어(macOS):

    코드 블럭
    build-wrapper-macosx-x86 --out-dir bw bazel
      --batch
      build
      --spawn_strategy=local
      --strategy=Genrule=local
      --bazelrc=/dev/null
      //main:hello-world
  • MSBuild: MSBuild는 기존의 빌드 노드를 재사용할 수 있습니다. 이 경우 Build Wrapper가 일부 노드를 모니터링하지 못할 수 있으므로 nodeReuse:False 옵션을 추가해야 합니다.


컴파일 데이터베이스(Compilation Database)

...

모드


  1.  Compilation Database 생성
    CMake를 사용하는 경우, 다음 명령어를 실행하여 compile_commands.json 파일을 생성합니다:
    코드 블럭
    cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..

  2. SonarScanner 설정
    sonar-project.properties 파일을 설정하고 sonar.cfamily.compile-commands 속성을 추가한다.
    코드 블럭
    sonar.projectKey=myFirstProject
    sonar.projectName=My First C++ Project
    sonar.projectVersion=1.0
    sonar.sources=src
    sonar.cfamily.compile-commands=compile_commands.json
    sonar.sourceEncoding=UTF-8
    sonar.host.url=<Your_SonarQube_URL>
  3. SonarScanner 실행
    코드 블럭
    sonar-scanner
    
    

...