2016-11-24 4 views
0

Dans gcc et clang, les répertoires include peuvent être passés au compilateur en utilisant -I ou -isystem.build boost: Comment marquer un include comme un "système" include

La différence est, isystem chemins ne sont fouillés quand crochets <> sont utilisés dans une directive #include, plutôt que des citations "". En outre, certains avertissements sont supprimés lorsqu'ils apparaissent dans les en-têtes du système (puisque vous ne pouvez probablement pas contourner les problèmes dans les en-têtes du système). (Il peut y avoir d'autres différences mineures pour autant que je sache.)

Tous les compilateurs ne supportent pas ce concept, c'est un problème d'implémentation qui ne fait pas partie de la norme.

cmake prend en charge cette fonctionnalité spécifiquement, et va "faire la bonne chose" sur les compilateurs qui le prennent en charge.

sconsscons historiquement ne l'a pas pris en charge, mais il existe des façons de contourner ce problème, et il a également intégré some support depuis assez récemment.

Existe-t-il une fonctionnalité équivalente dans boost.build, aussi connu sous le nom de bjam, b2? Dans la documentation et les exemples, les répertoires include sont spécifiés en utilisant <include>path/to/files et transmis en tant qu'exigences des cibles lib ou exe. Mais je n'ai trouvé aucun <system_include> ou une caractéristique similaire.

S'il n'existe pas, est-il possible de contourner ce problème? Certains projets ne seront pas construits sans avertissement sur gcc et clang à moins que ces indicateurs ne soient utilisés correctement.

Répondre

1

Non, il n'existe aucune fonctionnalité de ce type dans boost.build. Ce que vous pouvez faire à la place est conditionnellement activer -isystem pour les outils particuliers qui prennent en charge les inclusions du système, par exemple:

exe myexe : mysrc.cpp : <toolset>gcc:<cxxflags>-isystem/path/to/include/files ;