2017-10-26 3 views
0

외부 라이브러리에 대한 경고를 무시하는 방법에는 두 가지가 있습니다.외부 라이브러리에 대한 경고를 무시하고 디렉토리를 포함하지 않는 C++ 컴파일러 플래그

첫 번째 방법은 #pragma을 사용하는 것입니다

#pragma gcc diagnostic ignored "-Wunused-parameter" 

두 번째 방법은 컴파일러 플래그에 -isystem/path/to/system/lib를 추가하는 것입니다. 이 레이블은 해당 경로를 외부 포함 경로로 포함하므로 컴파일러는 포함 경로에서 발생하는 경고를 표시하지 않습니다.

많은 컴파일 대상이있는 대규모 프로젝트가 있는데, 그 중 일부는 제 3 자 라이브러리를 사용하여 제 컴파일러에서 문제를 일으 킵니다. 이유가있어서 #pragma 옵션을 사용할 수 없습니다.

그러나 모든 빌드 대상에 블랭킷 컴파일러 플래그로 -isystem을 사용하면 불행하게도 그 시스템 라이브러리를 사용하지 않는 다른 빌드 대상에 대해서도 /path/to/system/lib을 포함시킬 것입니다. 즉, 다른 대상이 해당 외부 라이브러리를 검색하므로 바람직하지 않습니다.

담요 방식으로 추가 할 수 있습니다 -isystem 유사한 컴파일러 옵션은 어떤 는 검색 경로에 추가 할 수 있지만 경로가 이미 검색 경로에 포함되는 일 경우에만 경고를 제외하지 않고 있습니까?

답변

1

많은 컴파일 대상이있는 대규모 프로젝트가 있는데, 그 중 일부는 제 3 자 라이브러리를 사용하여 제 컴파일러에 문제를 일으 킵니다. 이유가있어서 #pragma 옵션을 사용할 수 없습니다.

이것에 대해 자세히 설명해 주시겠습니까? #pragma GCC diagnostic의 래퍼 헤더가 옵션이 아닌 이유는 무엇입니까? 즉,이 같은 것입니다 : 서브 시스템의 경계를 횡단하는 경우에만

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wunused-parameter" 
#include </path/to/real/include.h> 
#pragma GCC diagnostic pop 

(. 당신은 멋진 얻을하려는 경우 또는 #include_next 사용) 당신이 적용된다; 서브 시스템 자체는 -Wunused-parameter으로 컴파일됩니다.

새로운 시스템 헤더를 추가하지 않고 시스템 헤더 플래그를 재설정 할 수있는 GCC/libcpp 소스에는 아무것도 표시되지 않습니다. 어쨌든, 이것은 빌드 시스템 내에서 합리적으로 해결 될 수있는 무언가를 좋아합니다.

+0

저는 조직의 기존 코드베이스를 사용하고 있으며, 고급 코드 검토자를 따라야합니다. 수석 검토자는 pragma 솔루션을 사용할 수 없다고 지정합니다. – Anton

+0

필자는 관련 타겟에 대해서만'-isystem'을 올바르게 설정하기 위해 약간의 치밀한 CMake 마법을 사용할 수 있지만, 필자가 필요로하는 플래그를 갖는 것보다 시간이 오래 걸릴 수 있습니다. 나는 거의 같은 fakedly CMake 마술을하는 것으로 끝났으므로 그런 깃발이 없다면 괜찮을 것이다 ... – Anton

관련 문제