提升构建:如何将包含标记为 "system" 包含
boost build: How to mark an include as a "system" include
在 gcc
和 clang
中,可以使用 -I
或 -isystem
.
将包含目录传递给编译器
区别在于,isystem
路径仅在 #include
指令中使用尖括号 <>
而不是引号 ""
时被搜索。此外,某些警告在系统 headers 中出现时会被抑制(因为您可能无法解决系统 headers 中的问题)。 (据我所知可能还有其他细微差别。)
并非所有编译器都支持这个概念,这是一个实现问题,不是标准的一部分。
cmake
特别支持此功能,并将 "do the right thing" 在支持它的编译器上。
scons
历史上不支持它,但有一些方法可以解决这个问题,而且它最近也有 some support built-in。
boost.build
aka bjam
、b2
中是否有等效的功能?在文档和示例中,包含目录使用 <include>path/to/files
指定并作为 lib
或 exe
目标的要求传递。但是我没有找到任何 <system_include>
或类似的功能。
如果它不存在,有没有办法解决它?除非正确使用这些标志,否则某些项目不会在 gcc
和 clang
上没有警告。
不,boost.build中没有这样的功能。您可以做的是有条件地为支持系统的特定工具集启用 -isystem
,例如:
exe myexe : mysrc.cpp : <toolset>gcc:<cxxflags>-isystem/path/to/include/files ;
在 gcc
和 clang
中,可以使用 -I
或 -isystem
.
区别在于,isystem
路径仅在 #include
指令中使用尖括号 <>
而不是引号 ""
时被搜索。此外,某些警告在系统 headers 中出现时会被抑制(因为您可能无法解决系统 headers 中的问题)。 (据我所知可能还有其他细微差别。)
并非所有编译器都支持这个概念,这是一个实现问题,不是标准的一部分。
cmake
特别支持此功能,并将 "do the right thing" 在支持它的编译器上。
scons
历史上不支持它,但有一些方法可以解决这个问题,而且它最近也有 some support built-in。
boost.build
aka bjam
、b2
中是否有等效的功能?在文档和示例中,包含目录使用 <include>path/to/files
指定并作为 lib
或 exe
目标的要求传递。但是我没有找到任何 <system_include>
或类似的功能。
如果它不存在,有没有办法解决它?除非正确使用这些标志,否则某些项目不会在 gcc
和 clang
上没有警告。
不,boost.build中没有这样的功能。您可以做的是有条件地为支持系统的特定工具集启用 -isystem
,例如:
exe myexe : mysrc.cpp : <toolset>gcc:<cxxflags>-isystem/path/to/include/files ;