2017-05-17 1 views
0

TL; DR : 나는의 헤더를 포함 할 때 나는 내 자신의 코드를 컴파일하는 데 사용되는 플래그에 의해 트리거 경고를 처리 할 수있는 방법 플래그의 특정 세트와 외부 라이브러리를 컴파일 할 때 이 도서관?특정 컴파일 플래그

나는 프로젝트의 빌드 시스템으로 autotools를 사용하고 난 대상에 따라 적절하게 컴파일 플래그를 설정하고 싶습니다.

내가 경고의 어떻게 든 높은 수준의 내 자신의 소스를 컴파일하고 싶은

(/ 디버깅 컴파일러에서 도움을 버그를 방지는 항상 환영합니다). 현재 사용되는 경고 플래그에는 예를 들어 -Wsuggest-override이 있습니다. 내 소스 외에 내가 가진

나는 이제의 정보 페이지에서 두 개의 별도의 플래그 세트, 을 가지고 -Ofast

가정 해 봅시다, 컴파일하고자하는 외부 라이브러리 (당신이 정말로 알고 싶다면 pugixml) automake 구체적인 예가 담긴 흥미로운 섹션이 있습니다 Per-Object Flags: How to simulate per-object flags?.

__top_srcdir__we_SOURCES = main.cc 
: 프로그램 소스의

__top_srcdir__bin_LDADD = libpugixml.a 
noinst_LIBRARIES = libpugixml.a 
libpugixml_a_SOURCES = pugixml/pugixml.cpp 
libpugixml_a_CPPFLAGS = -Ofast 

세트가 더 이상 라이브러리 소스를 포함 : 내 Makefile.am에 다음 없다가 왜 입니다

(또한 주제에 대한 몇 가지 SO 질문이 있습니다)

이 작업은 정상적으로 작동합니다. 라이브러리는 플래그 세트로 빌드되고 다른 소스와 함께 소스 코드는 모두 정상입니다 ...

까지 내 소스에서 라이브러리의 헤더와 그 내가 이것을 게시하도록하겠습니다 왜 질문

는 main.cc (너무 오래는?) : 컴파일하는 동안

#include <pugixml/pugixml.hpp> // -Wsuggest-override triggered 

int main() { return 0; } 

-Wsuggest-override 라이브러리 소스

에 트리거

공식 automake 솔루션이 경우에는 적용되지 아니 경고의 다른 세트를합니까 아니면 내가 뭔가 잘못하고있는 중이 야?

automake 버전 (기분에 따라) 나는 그것이 중요한 경우 확실하지 오전하지만 난 g++ 및/또는 clang을 사용하고 있습니다 : 당신의 도움에 대한 1.15

감사 automake를 (GNU의 automake를)

답변

1
#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wsuggest-override" 
#include <pugixml/pugixml.hpp> 
#pragma clang diagnostic pop 

...

보통 이런 경우에는 clang으로 무엇을 할 것입니까?

이이 automake 문제가 어떻게 표시되지 않습니다. 승격 된 경고없이 편의 라이브러리를 컴파일하고 승격 된 경고와 함께 종속 헤더를 사용하는 코드. 그냥 make 또는 cmake 또는 명령 줄을 사용하여 빌드 한 경우에도 동일한 문제가 발생합니다.

+0

+1, 답변 해 주셔서 감사합니다.나는 automake에게 말할 방법이 없는지 궁금 해서요. "이 헤더는이 라이브러리에 속해 있으므로 포함되어 있다면 적절한 플래그를 사용하십시오." – Zermingore

+0

OK, 지금 당신이 얻고있는 것을 봅니다. 불행히도 대답은 '아니다. automake'는 그렇게 할 수 없다. – ldav1s

관련 문제