提升构建:如何将包含标记为 "system" 包含

boost build: How to mark an include as a "system" include

gccclang 中,可以使用 -I-isystem.

将包含目录传递给编译器

区别在于,isystem 路径仅在 #include 指令中使用尖括号 <> 而不是引号 "" 时被搜索。此外,某些警告在系统 headers 中出现时会被抑制(因为您可能无法解决系统 headers 中的问题)。 (据我所知可能还有其他细微差别。)

并非所有编译器都支持这个概念,这是一个实现问题,不是标准的一部分。

cmake 特别支持此功能,并将 "do the right thing" 在支持它的编译器上。

scons 历史上不支持它,但有一些方法可以解决这个问题,而且它最近也有 some support built-in。

boost.build aka bjamb2 中是否有等效的功能?在文档和示例中,包含目录使用 <include>path/to/files 指定并作为 libexe 目标的要求传递。但是我没有找到任何 <system_include> 或类似的功能。

如果它不存在,有没有办法解决它?除非正确使用这些标志,否则某些项目不会在 gccclang 上没有警告。

不,boost.build中没有这样的功能。您可以做的是有条件地为支持系统的特定工具集启用 -isystem,例如:

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