Используя сканирования я могу легко установить мой включать пути:
env.Append( CPPPATH=['foo'] )
Это передает флаг
-Ifoo
к gcc
Однако я пытаюсь скомпилировать с большим количеством включенных предупреждений. В особенности с
env.Append( CPPFLAGS=['-Werror', '-Wall', '-Wextra'] )
то, которое умирает ужасно на определенном повышении, включает... Я могу зафиксировать это путем добавления, что повышение включает в систему, включают путь, а не включать путь, как gcc система обработок включает по-другому.
Таким образом, то, что я должен быть передан gcc вместо-Ifoo,
-isystem foo
Я предполагаю, что мог сделать это с переменной CPPFLAGS, но задавался вопросом, было ли лучшее решение, встроенное в сканирования.
Нет встроенного способа передачи -isystem include paths в SCons, главным образом потому, что он очень специфичен для компилятора / платформы.
Помещение его в CXXFLAGS будет работать, но учтите, что это скроет заголовки от сканера зависимостей SCons, который смотрит только на CPPPATH.
Это, вероятно, нормально, если вы не ожидаете, что эти заголовки когда-либо изменятся, но может вызвать странные проблемы, если вы используете кеш результатов сборки и / или кеш неявных зависимостей.
Если вы это сделаете
print env.Dump()
, вы увидите _CPPINCFLAGS
, и вы увидите переменную, используемую в CCCOM (или _CCCOMCOM). _CPPINCFLAGS обычно выглядит следующим образом:
'$( ${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'
Из этого вы, вероятно, можете увидеть, как вы могли бы добавить набор включений «isystem», например, _CPPSYSTEMINCFLAGS или что-то в этом роде. Просто определите свой собственный префикс, имя path var (например, CPPSYSTEMPATH) и суффикс и используйте приведенную выше идиому для сцепления префикса. Затем просто добавьте свой _CPPSYSTEMINCFLAGS в CCCOM или _CCCOMCOM и уходите.
Конечно, это зависит от системы, но вы можете условно включить новую переменную в командную строку компилятора по своему желанию.