[gcc] 라이브러리 헤더에서 GCC 경고를 억제하는 방법은 무엇입니까?
-isystem
대신을 사용하여 라이브러리 헤더를 포함 할 수 있습니다 -I
. 이렇게하면 "시스템 헤더"가되고 GCC는 경고를보고하지 않습니다.
CMake를 사용 하는 경우 이러한 헤더에 대한 경고를 억제 include_directories
하는 기호를 포함하도록 지시문을 수정할 수 SYSTEM
있습니다.
include_directories(SYSTEM "${LIB_DIR}/Include")
^^^^^^
-------------------pragma를 사용할 수 있습니다. 예를 들면 :
// save diagnostic state
#pragma GCC diagnostic push
// turn off the specific warning. Can also use "-Wall"
#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <boost/lexical_cast.hpp>
// turn the warnings back on
#pragma GCC diagnostic pop
-------------------트릭을 찾았습니다. 라이브러리 포함의 -Idir
경우 -isystem dir
메이크 파일에서 사용하는 대신 . 그런 다음 GCC는 시스템이 경고를 포함하고 무시하므로 부스트 등을 처리합니다.
#pragma
컴파일러에 대한 지침입니다. #include 앞에 무언가를 설정하고 나중에 비활성화 할 수 있습니다.
명령 줄 에서도 수행 할 수 있습니다 .
특히 경고 비활성화에 대한 또 다른 GCC 페이지 .
소스 코드 내에서 #pragma를 사용한 다음 경고를 비활성화하는 이유에 대한 건전한 이유 (주석으로) 를 제공하는 옵션을 선택하겠습니다 . 이것은 헤더 파일에 대한 추론을 의미합니다.
GCC 는 경고 유형 을 분류 하여 이에 접근합니다 . 경고 또는 무시하도록 분류 할 수 있습니다. 이전에 링크 된 기사는 비활성화 될 수있는 경고를 보여줍니다.
참고 : 속성 을 사용하여 특정 경고를 방지하기 위해 소스 코드를 마사지 할 수도 있습니다 . 그러나 이것은 GCC와 매우 밀접하게 연결됩니다.
참고 2 : GCC는 또한 Microsoft의 컴파일러에서 사용되는 팝 / 푸시 인터페이스 를 사용합니다. Microsoft는이 인터페이스를 통해 경고를 비활성화합니다. 가능한지 모르겠으므로이 문제를 추가로 조사하는 것이 좋습니다.
-------------------미리 컴파일 된 헤더를 사용해 볼 수 있습니다 . 경고는 사라지지 않지만 적어도 메인 컴파일에는 표시되지 않습니다.
-------------------시스템 헤더를 명시 적으로 재정의해야하는 경우 pragma로 제한됩니다. make depend
출력 을 통해 사용중인 포함을 확인할 수 있습니다 .
gcc> = 4.6에 대한 진단 푸시 팝 도 참조하십시오.
-------------------다음을 넣어
#pragma GCC system_header
이 파일의 모든 다음 코드에 대해 GCC 경고를 끕니다.
-------------------그러한 경고에 대한 이유가 있어야합니다. 이는 라이브러리를 사용하는 코드의 오류 또는 라이브러리 코드 자체의 오류로 인해 발생합니다. 첫 번째 경우에는 코드를 수정하십시오. 두 번째 경우에는 라이브러리 사용을 중지하거나 FOSS 코드 인 경우 수정하십시오.
출처
https://stackoverflow.com/questions/1900578