나는 많은 (반복적 인) 경고를 생성하는 log4cxx, boost 등의 라이브러리를 사용하는 프로젝트를 가지고있다. 라이브러리 포함 (예 : #include < some-header.h >)에서 경고를 표시하지 않거나 특정 경로를 포함 할 수 있습니까? 나는 관련 정보가 모호해지지 않고 프로젝트 코드에서 -Wall 및/또는 -Wextra를 평소처럼 사용하고 싶습니다. 현재 grep을 사용하여 출력하고 있지만 더 나은 것을 원합니다.라이브러리 헤더에서 GCC 경고를 억제하는 방법은 무엇입니까?
답변
-I
대신 -isystem
을 사용하여 라이브러리 헤더를 포함 할 수 있습니다. 이렇게하면 "시스템 헤더"가되며 GCC는 경고를 보냅니다.
precompiled headers을 사용해보세요. 경고는 사라지지 않지만 최소한 편집본에는 나타나지 않습니다.
이것은 실제로 좋은 생각 일 수 있습니다. 제 3 자 포함은 매일 바뀌지 않습니다. – AdSR
정확히. Linux에서 많이 사용하지는 않았지만 Visual Studio에서 잘 작동합니다. –
#pragma
은 컴파일러에 대한 지침입니다. 당신은 #include 전에 무언가를 설정할 수 있고 후에 비활성화 할 수 있습니다.
command line에서도 할 수 있습니다.
또 다른 GCC 페이지는 disabling warnings입니다.
나는 소스 코드 내에서 # 프라그의의를 사용하여, 다음이 경고를 비활성화하는 이유 (댓글 등) 소리 이유를 제공하는 옵션에 갈 것입니다. 이것은 헤더 파일에 대한 추론을 의미합니다.
GCC가 경고 유형 인 classifying에 접근합니다. 경고로 간주하거나 무시할 수 있습니다. 이전에 링크 된 기사는 사용할 수없는 경고를 표시합니다.
참고 : attributes을 사용하여 특정 경고가 표시되지 않도록 소스 코드를 완화 할 수도 있습니다. 그러나 이것은 GCC와 매우 밀접하게 연결됩니다.
참고 2 : GCC는 microsoft 컴파일러에서 사용되는 pop/push interface도 사용합니다. Microsoft는이 인터페이스를 통해 경고를 비활성화합니다. 나는 이것이 가능할 지 모르겠으므로 너는 이것을 더 깊이 조사 할 것을 제안한다.
pragma를 고려했지만 헤더를 포함하기 전에 경고를 표시하지 않으면 #include 뒤에 * 이전 상태로 다시 설정하는 방법은 무엇입니까? 프로젝트 코드에 대한 모든 경고를보고 싶지만 (이미 몇 번 도와 줬음) 명령 행에서 제어 할 수 있습니다. – AdSR
추가 정보. –
이러한 경고의 이유가 있어야합니다. 이러한 오류는 라이브러리를 사용하는 코드의 오류 또는 라이브러리 코드 자체의 오류로 인해 발생합니다. 첫 번째 경우에는 코드를 수정하십시오. 두 번째 경우에는 라이브러리 사용을 중지하거나 FOSS 코드 인 경우이를 수정하십시오.
트릭을 발견했습니다. 라이브러리 포함의 경우, -Idir 대신 -isystem dir을 makefile에 사용하십시오. 그런 다음 GCC는 시스템이 포함 할 때 부스트 등을 처리하고 그로부터의 경고를 무시합니다.
pragma를 사용할 수 있습니다. 예를 들어 : CMake를 사용하는 사람들을 위해
// 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
GCC> = 4.6 만 사용 가능 – Caduchon
, 당신은 헤더에 대한 경고를 억제 기호 SYSTEM
을 포함하도록 include_directories
지시를 수정할 수 있습니다.
include_directories(SYSTEM "${LIB_DIR}/Include")
^^^^^^
라이브러리가 CMake의 [include()] (https://cmake.org/cmake/help/latest/command)와 함께 사용되는'$ {LIBFOO_USE_FILE} '변수를 제공하면 어떻게 될까요? /include.html) 명령? – waldyrious
이것은 내 문제에 대한 거의 해결책으로 보인다. 나는) 1) 바이너리 타겟, 2)에 의존하는 헤더 전용 타겟, 3) 외부 라이브러리에 의존한다. 나는 1 & 2에 대해서만 경고를받는 방법을 모른다. 아이디어 있니? – knedlsepp
작동하지 않는 것 같습니다. 나는'easylogging ++'을 사용하는 프로젝트에서이 파일을 시험해 보았고,'easylogging ++. h '파일에서'SYSTEM' 옵션에 포함되어있는 폴더와 같은 크기의 경고 파일을 얻었습니다. – rbaleksandar
시스템 헤더를 명시 적으로 무시해야하는 경우 pragma로 제한됩니다. make depend
출력을 통해 어떤 것이 포함되어 있는지 확인할 수 있습니다.
도 참조하십시오. diagnostic push-pop for gcc >= 4.6
- 1. msbuild에서 DISPPARAMS 경고를 억제하는 방법?
- 2. @dynamic없이 @property 경고를 억제하는 방법은 없나요?
- 3. gcc, make : 실패시 경고를 비활성화하는 방법은 무엇입니까?
- 4. 함수 내에서 qplot의 binwidth 경고를 억제하는 방법은 무엇입니까?
- 5. 외부 라이브러리 헤더에서 gcc 컴파일러 패닉 오류를 무시하는 방법?
- 6. 모든 gcc 경고를 비활성화합니다.
- 7. GCC - 경고를 발행해서는 안됩니까?
- 8. IE의 보호 모드에서 경고를 억제하는 방법
- 9. 잊혀진 return 문에 대해 gcc 경고를 설정하는 방법은 무엇입니까?
- 10. 어떻게 GCC 링커 경고를 억제합니까?
- 11. gcc 라이브러리 혼동
- 12. GCC 라이브러리 링크 문제
- 13. jqgrid가 초기에 데이터를로드하는 것을 억제하는 방법은 무엇입니까?
- 14. 파이썬 2에서 캐리지 리턴을 억제하는 방법은 무엇입니까?
- 15. 파이썬에서 콘솔 출력을 억제하는 방법은 무엇입니까?
- 16. mb_detect_encoding을 사용하여 인코딩을 올바르게 억제하는 방법은 무엇입니까?
- 17. 변수 뒤에 캐리지 리턴을 억제하는 방법은 무엇입니까?
- 18. 모든 JavaScript 런타임 오류를 억제하는 방법은 무엇입니까?
- 19. 경고를 표시하지 않으려는 gcc/Xcode pragma가 있습니까?
- 20. Drupal 뷰의 헤더에서 PHP를 사용하는 방법은 무엇입니까?
- 21. gcc : 표준 포함 경로를 무시하는 방법은 무엇입니까?
- 22. 클래스 란 무엇입니까? 헤더에서
- 23. gnu gcc 컴파일러 헤더에서 누락 된 것들이 있습니까? (commctrl.h)
- 24. MPMoviePlayerController.currentPlaybackTime을 재정의 할 때 경고를 제거하는 방법은 무엇입니까?
- 25. 번역 단위의 일부에 대해서만 GCC 경고를 선택적으로 비활성화 하시겠습니까?
- 26. 문자열의 PHP 오류/경고를 검출하는 라이브러리
- 27. Gladman AES 라이브러리 - 컴파일러 경고를 무시해도 안전합니까?
- 28. 렌더 프로세스를 제어하거나 BR의 태그 동작을 억제하는 방법은 무엇입니까?
- 29. gcc-arm toolchain 용 Boost C++ 라이브러리
- 30. gcc -l 옵션 및 .la 라이브러리 파일
Xcode에서이 작업을 수행하려는 경우 대상 빌드 설정의 "사용자 정의 컴파일러 플래그"에서 "기타 C++ 플래그"로 시스템 경로를 지정하십시오. –
잠재적 인 단점 중 하나는 일부 플랫폼에서 g ++가'extern "C"'에 시스템 헤더를 자동으로 래핑하여'-isystem' 경로에 C++ 헤더를'#include '할 경우 C 링키지에 대한 이상한 오류가 발생한다는 것입니다. –
+1 성가신 부스트 경고와 관련된 문제를 해결하는 데 도움이되었습니다. http://stackoverflow.com/questions/35704753/warnings-from-boost – mrgloom