TL; DR: Lorsque je compile une bibliothèque externe avec un ensemble spécifique de drapeaux, comment puis-je gérer les avertissements déclenchés par les drapeaux utilisés pour compiler mon propre code lorsque j'inclus les en-têtes de cette bibliothèque? J'utilise autotools comme système de construction dans un projet et je voudrais régler correctement les drapeaux de compilation en fonction de la cible.Drapeaux de compilation spécifiques avec autotools et bibliothèque statique
Je voudrais compiler mes propres sources avec un niveau d'avertissement assez élevé (toute aide du compilateur pour déboguer/empêcher les bogues est toujours la bienvenue). Dans le jeu de drapeaux d'avertissement actuellement utilisé, il y a -Wsuggest-override
que je prendrai comme exemple.
J'ai d'ailleurs mes sources d'une bibliothèque externe (pugixml
si vous voulez vraiment savoir) que je voudrais compiler avec, disons que -Ofast
Pour avoir deux ensembles distincts de drapeaux, Dans la page d'information de automake
il y a une section intéressante avec un exemple concret Per-Object Flags: How to simulate per-object flags?. (Il y a aussi des questions SO sur le sujet)
Voilà pourquoi dans mon Makefile.am
il est le suivant:
__top_srcdir__bin_LDADD = libpugixml.a
noinst_LIBRARIES = libpugixml.a
libpugixml_a_SOURCES = pugixml/pugixml.cpp
libpugixml_a_CPPFLAGS = -Ofast
L'ensemble des sources de programme ne contient plus les sources de bibliothèque:
__top_srcdir__we_SOURCES = main.cc
Cela fonctionne très bien, la bibliothèque est construite avec un ensemble de drapeaux, mes sources avec un autre, tout est ok ...
Jusqu'à ce que j'inclue un en-tête de la bibliothèque dans mes sources et c'est la raison pour laquelle je poste cette question
main.cc (trop longtemps?):
#include <pugixml/pugixml.hpp> // -Wsuggest-override triggered
int main() { return 0; }
Lors de la compilation, l'-Wsuggest-override
est déclenchée dans les sources de la bibliothèque
Est-ce que la solution officielle automake
pour avoir différents ensembles d'avertissements ne s'applique pas dans ce cas ou est-ce que je fais quelque chose de mal?
Je ne sais pas si ça compte, mais j'utilise g++
et/ou clang
(selon l'humeur) la version automake
: automake (GNU automake) 1,15
Merci pour votre aide
+1, Merci pour votre réponse.Je me demandais s'il n'y avait pas un moyen de dire automake "cet en-tête appartient à cette bibliothèque donc si c'est inclus, utilisez les drapeaux appropriés" – Zermingore
OK, je vois ce que vous obtenez à l'heure actuelle. Malheureusement, la réponse est non, "automake" ne peut pas faire ça. – ldav1s