itiviti-cpp-analyzer (또는 ICA)는 Clang 플러그인으로 여러 정적 분석 검사를 제공합니다 (여기에 나열).
프로젝트에 기여하려면 Contributing.md를 참조하십시오.
플러그인을 빌드하려면 Clang과 Cmake가 필요합니다. 또한 libclang-10-dev 및 libclang-cpp10-dev 패키지가 필요합니다. 선택적으로 부스트 1.68+ 헤더가 필요할 수 있습니다 (대신 빌드 중에 다운로드 할 수 있음).
현재 ICA는 clang-10 에서만 작동합니다
[ ! -d build ] && mkdir build
cd build
cmake
-DGCC_TOOLCHAIN= < path/to/gcc/toolchain (probably, /usr/lib) >
-DBOOST_FROM_INTERNET=ON
-DTARGET_COMPILER=clang++-10
../
cmake --build . --parallelBOOST_FROM_INTERNET 헤더를 부스트하지 않은 경우에만 필요합니다BOOST_ROOT 대신 지정할 수 있습니다TARGET_COMPILER 테스트에 사용되는 컴파일러입니다. 컴파일에 clang-10 사용하지 않는지 지정하십시오 내장 플러그인은 ./build/libica-plugin.so 에 있습니다
libica-plugin.so 및 clang-10 필요합니다
선택적으로 지정된 방출 레벨이있는 쉼표로 분리 된 수표 목록
확인 이름이 여기에 나열되어 있습니다. 모든 수표를 나열하는 별칭 - all
방출 레벨 :
none - 점검이 비활성화되어 있습니다warn - 기본값err예:
all=warn,-redundant-noexcept,erase-in-loop=err
경고 수준으로 all 검사를 활성화하고, redundant-noexcept 를 비활성화하고, erase-in-loop 검사를위한 오류 수준을 설정합니다.
추가 깃발이 필요합니다.
-load path/to/libica-plugin.so-add-plugin ica-plugin-plugin-arg-ica-plugin checks=$CHECKS-plugin-arg-ica-plugin no-url 선택적으로 URL을 확인 메시지에 통합하는 비활성화 CHECKS 확인 목록입니다
컴파일러 프론트 엔드에 대한 모든 인수는 -Xclang 과 함께 전달되므로 최종 목록은 다음과 같습니다.
-Xclang -load -Xclang ../build/libica-plugin.so
-Xclang -add-plugin -Xclang ica-plugin
-Xclang -plugin-arg-ica-plugin -Xclang checks=$CHECKS
CMAKE 프로젝트가있는 경우 ICA를 외부 프로젝트 또는 작업 영역의 하위 디렉토리로 쉽게 사용할 수있는 옵션이 있습니다. 어쨌든 여러 cmake 도우미가 이용 가능해야합니다.
add_ica_checks(check1 check2 ...) - 플러그인을로드하고 지정된 확인을 활성화합니다. 평소와 같이 여기에서 Emit 레벨을 사용할 수 있습니다.ica_no_url() - URL을 확인 메시지에 통합하는 비활성화. target_ica_checks(MyTarget VISIBILITY ...) 또는 target_ica_no_url(MyTarget VISIBILITY) 실행은 단일 대상 및/또는 해당 종속성에 구성을 적용합니다.
최소한의 통합 예는 다음과 같습니다.
먼저 ICA를 제작하고 설치해야합니다.
cd build && cmake --install . --install-prefix /path/to/ica/installation/cmakelists.txt 에 이것을 추가하십시오
# NOTE: `find_package` should be located after root `project(...)`
project (<your project> LANGUAGES C CXX)
...
# If ICA is installed in unusual location
list ( APPEND CMAKE_PREFIX_PATH "/path/to/ica/installation" )
find_package (ICA CONFIG REQUIRED)
add_ica_checks(<your checks list>)
...
# NOTE: Added checks will be effective only for subsequent targets
add_subdirectory (my-subdir)
add_library (my-lib)
add_executable (my-exec)프로젝트에 하위 디렉토리로 ICA 소스를 추가하고 (아마도 git 하위 모듈 을 통해) cmakelists.txt 에 추가하십시오.
# NOTE: `add_subdirectory` should be located after root `project(...)`
project (<your project> LANGUAGES C CXX)
...
# Set any other cache variables here: GCC_TOOLCHAIN, LLVM_ROOT, ...
set (BOOST_FROM_INTERNET ON )
add_subdirectory (itiviti-cpp-analyzer)
add_ica_checks(<your checks list>)
...
# NOTE: Added checks will be effective only for subsequent targets
add_subdirectory (my-subdir)
add_library (my-lib)
add_executable (my-exec) // NOLINT 댓글은 라인의 경고를 억제합니다.
map.emplace( 0 , std::string{}); // NOLINTEmplace-Default-Value 점검이 여기에서 억제됩니다