0

TL;DR: When I compile an external library with a specific set of flags, how can I deal with warnings triggered by the flags used to compile my own code when I include the headers of this library ?

I am using autotools as a build system in a project and I would like to set compilation flags properly depending on the target.

I would like to compile my own sources with a somehow high level of warning (any help from the compiler to debug / prevent bugs is always welcome). In the warning flags set currently used there is -Wsuggest-override which I'll take as an example.

I have besides my sources an external library (pugixml if you really want to know) which I would like to compile with, let's say -Ofast

To have two separate sets of flags, In the info page of automake there is an interesting section with a concrete example Per-Object Flags: How to simulate per-object flags?. (There are also some SO question on the topic)

That's why in my Makefile.am there is the following:

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

The set of program sources no longer contains the library sources:

__top_srcdir__we_SOURCES = main.cc

This works fine, the library is build with a set of flags, my sources with another one, everything is ok...

Until I include a header of the library in my sources and that's why I'm posting this (too long ?) question

main.cc:

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

int main() { return 0; }

During the compilation, the -Wsuggest-override is triggered in the library sources

Does the official automake solution to have different sets of warnings not not apply in this case or am I doing something wrong ?

I am not sure if it matters but I'm using g++ and/or clang (depending on the mood) the automake version: automake (GNU automake) 1.15

Thanks for your help

Zermingore
  • 743
  • 2
  • 11
  • 28

1 Answers1

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

...

Is what I usually would do in these instances with clang.

I don't see how this is an automake problem. You're compiling the convenience library without elevated warnings, and the code that uses the dependency header with elevated warnings. You'd have the same problem if you built them using just make, or cmake, or the command line.

ldav1s
  • 15,885
  • 2
  • 53
  • 56
  • +1, Thank you for your answer. I was wondering if there is not a way to tell automake "this header belongs to this library so if it's included, use the appropriate flags" – Zermingore May 18 '17 at 07:33
  • OK, I see what you are getting at now. Unfortunately, the answer is no, `automake` can't do that. – ldav1s May 18 '17 at 17:35