이 프로젝트에는 Clang 컴파일러 및 GNU 컴파일러 컬렉션이 C 가족 언어 (C, C ++ 및 Objective-C)에 대한 모든 경고 플래그를 파악하는 도구 및 목록이 포함되어 있습니다. 이것은 또한 특정 플래그에서 사용하는 모든 별칭 및 경고 플래그가 표시되므로 ( "#"문자로 접두사) 어떤 플래그가 어떻게 활성화되어 있는지 쉽게 확인할 수 있습니다. 호환성 또는 감가 상각 이유에 대해 아무것도하지 않는 경고 플래그도 있습니다. "# 더미 스위치"텍스트로 접미사가 있습니다.
이 컬렉션의 목적은 컴파일러가 제공하는 정적 코드 분석 도구를보다 쉽게 사용하는 것입니다.
Clang에는 모든 경고를 가능하게하는이 목록에 표시되지 않은 -Weverything
깃발이 포함되어 있습니다. Clang 문서는 Clang의 일부 진단 플래그에 대한 참조를 제공합니다.
GCC 경고 옵션의 전체 목록이 필요한 경우 GCC의 특정 버전에 대해 gcc --help=warnings
로 GCC를 실행하여 해당 목록을 얻을 수 있습니다. 그렇지 않으면 일부 일반 GCC 경고 옵션 목록은 다음과 같습니다.
이러한 종류의 목록에 대한 하나의 사용 사례는 다른 컴파일러와 컴파일러 버전간에 어떤 차이가 있는지 확인하는 것입니다. Diff-Files로 두 개의 결과적인 컴파일러 버전 사이의 기본 컴파일러 플래그 차이를 사용할 수 있었지만보다 구체적인 차이를 위해서는 아래와 같이 일부 (시각적) Diff 프로그램을 사용해야합니다.
이것은 실제 컴파일러 옵션 데이터 파일에서 경고 플래그를 구문 분석하기 위해 일부 지원 파이썬 코드가있는 파서 생성기로 Antlr을 사용합니다. 다른 요구 사항은 다음과 같습니다 (또한 종속성) :
모든 요구 사항을 설치하고 antlr4
명령으로 Antlr을 실행할 수있는 후에는 parsers/
Directory의 다음 명령을 사용하여 이러한 목록을 직접 생성하십시오.
ninja
./parse-clang-diagnostic-groups.py <path-to-clang-source>/include/clang/Basic/DiagnosticGroups.td
./parse-gcc-warning-options.py <path-to-gcc-source>/gcc/{common.opt,c-family/c.opt}
또한 모든 개별 경고 플래그 목록과 요청 된 컴파일러 버전에있는 종속성을 얻을 수 있습니다.
필터링 된 목록을 생성하려면 --top-level
및 --unique
스위치를 사용할 수 있습니다.
--top-level
스위치에는 목록의 다른 스위치에서 활성화 된 경고가 포함되지 않습니다.--unique
다른 경고가 어떤 경고를 가능하게하는지 정보없이 모든 경고를 나열합니다. 이 페이지의 차이는이 파일에서 생성됩니다. 낮은 레벨 기능을 테스트하는 일부 단위 테스트가 있습니다. parsers/
Directory에서 ninja test
명령으로 시간을 실행하여 해당 단위 테스트 패스를 확인할 수 있습니다.
Parser가 형식화에 영향을 미치는 변경 사항을 가져 오면 여러 파일에 대한 기타 출력에 영향을 미칩니다.이 경고 목록은 다시 만들어야합니다. git 저장소 루트를 첫 번째 매개 변수로 취하고 최종 텍스트 파일을 생성하기 위해 이러한 명령의 모든 다른 변형을 적용하는 process-clang-git.sh
및 process-gcc-git.sh
스크립트가 있습니다.