scons - Как добавить поисковые каталоги в существующий сканер

Моя основная цель - добавить поддержку путей -isystem include в scons, как это предлагается здесь: /questions/18127453/kak-mne-ustanovit-sistemu-scons-vklyuchayuschuyu-put/18127461#18127461

Решение создания новых переменных работает отлично: я делаю это:

#### Add support for system headers
env['SYSTEMINCPREFIX'] = '-isystem '
env['SYSTEMINCSUFFIX'] = ''
env['_CPPSYSTEMINCFLAGS'] = '$( ${_concat(SYSTEMINCPREFIX, CPPSYSTEMPATH, SYSTEMINCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'
env['_CCCOMCOM'] += ' $_CPPSYSTEMINCFLAGS'

Я использую это, добавив, например:

env.Append(CPPSYSTEMPATH = ['/my/include/path'])

Моя проблема в том, что теперь путь / my / include / path не сканируется сканером зависимостей C (или C++). После многих поисков мне не удалось найти, как добавить мою переменную "CPPSYSTEMPATH", чтобы сканер зависимостей обрабатывал ее как "CPPPATH".

Кто-нибудь знает, как я мог бы добавить путь поиска, содержащийся в "CPPSYSTEMPATH" на существующий сканер C?

Я надеюсь, что моя проблема достаточно ясна, иначе не стесняйтесь, сообщите мне.

1 ответ

Решение

Вот основной рецепт для замены метода FindPath сканера C по умолчанию, но имейте в виду, что это уродливый хак:

# Create environment
env = Environment()
# Define your new env variable as combination of both paths
env['MYCPPPATHS'] = ['$CPPPATH','$CPPSYSTEMPATH']

# Replace the path_function of the standard C scanner by:
import SCons.Tool
import SCons.Scanner
setattr(SCons.Tool.CScanner,'path_function',SCons.Scanner.FindPathDirs('MYCPPPATHS'))

# Do your build stuff...
env['CPPSYSTEMPATH'] = 'myinclude'
env.Program('main','main.cpp')

Кстати, почему бы не задать такие вопросы в нашем списке рассылки пользователей scons-users@scons.org?;)

Другие вопросы по тегам