В gcc
а также clang
, каталоги include могут быть переданы компилятору с помощью -I
или же -isystem
,
Разница в том, isystem
пути ищутся только когда угловые скобки <>
используются в #include
директива, а не кавычки ""
, Кроме того, некоторые предупреждения подавляются, когда они появляются в системных заголовках (так как вы, вероятно, не можете обойти проблемы в системных заголовках). (Насколько я знаю, могут быть и другие незначительные различия.)
Не все компиляторы поддерживают эту концепцию, это проблема реализации, а не часть стандарта.
cmake
поддерживает эту функцию специально, и будет «делать правильные вещи» на компиляторах, которые ее поддерживают.
scons
исторически не поддерживал это, но есть способы обойти это, и это также имеет некоторая поддержка встроенный с недавних пор.
Есть ли эквивалентная особенность в boost.build
ака 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 ;
Других решений пока нет …