2014-08-29 4 views
1

나는 숨기고 싶은 많은 GCC 경고를 생성하는 제 3의 파티 소스를 포함하는 C/C++ 코드베이스를 다루고 있습니다. 제 3 자 코드는 수정하거나 라이브러리로 컴파일 할 수 없습니다 (빌드 시스템의 단점으로 인해). 프로젝트는 -Werror으로 컴파일됩니다.디렉토리별로 GCC 경고를 표시하지 않음

코드베이스의 일부 (서브 디렉토리에 포함)의 모든 경고를 무시하도록 GCC에 요청하거나, 적어도 이러한 경고를 치명적이지 않게 만들 것을 요청합니까?

나는 플래그 -isystem 알고 있어요,하지만 때문에 나를 위해 작동하지 않습니다

  • 그것은 단지 헤더에있는 소스 파일에 경고를 표시하지 않습니다.
  • C 링키지를 강제하므로 C++ 헤더와 함께 사용할 수 없습니다.

GCC 버전은 4.7 또는 4.8이며 빌드는 make입니다.

+1

은 메이크에게 옵션을 수정 있나요? 그것이 컴파일러 플래그가 설정된 곳입니다 ... – DevSolar

+0

최상위 Makefile을 수정할 수는 있지만 문제의 코드는 중첩 된 Makefile을 사용합니다. –

+0

코드 중첩 된 Makefile을 수정할 수 있습니다. –

답변

1

GCC는이 문제를 직접 해결할 수 없습니다. 올바른 수정은 빌드 시스템을 조정하는 것입니다 (재귀 적 make, 아마도).

매개 변수를 검색하는 작은 래퍼 스크립트를 작성하고 올바른 패턴을 발견하면 -Werror을 제거하십시오.

예.

#!/bin/bash 

newargs=() 
werror=true 
for arg; do 
    case "$arg" in 
    *directory-name-i-care-about*) 
     newargs=("${newargs[@]}" "$arg") 
     werror=false 
     ;; 
    -Werror) 
     ;; 
    *) 
     newargs=("${newargs[@]}" "$arg") 
     ;; 
    esac 
done 

if $werror; then 
    newargs=("${newargs[@]}" "-Werror") 
fi 

exec gcc "${newargs[@]}" 

그런 다음 빌드를 CC=my-wrapper-script.sh으로 실행하면 작업이 완료됩니다. 스크립트 gcc을 호출하여 실제 gcc보다 먼저 경로에 배치 할 수 있지만 스크립트의 끝에 올바른 "gcc"를 선택하는 데주의하십시오.

는 (사실은 해당 스크립트를 테스트하지했습니다, 그래서 버그가있을 수 있습니다.)