Я пытаюсь подготовить систему сборки, используя SCons. Я хочу использовать clang
для фазы генерации кода и настраиваемой инструментальной цепочки компилятора для всего остального.Настройка SCons для использования отдельных инструментов для генерации и сборки кода
По умолчанию конфигурация SCons не имеет явного шага, на котором генерируются файлы сборки (.s)
.
Чтобы обойти это, я создал свой собственный Builder
, который испускает файлы сборки.
code_generator = Builder(action = '$CC -$LOTS_OF_FLAGS -S $SOURCE -o $TARGET', suffix = '.s')
env.Append(BUILDERS = {'CodeGenerator':code_generator})
Затем я использую этот Builder
на моих исходных файлов и передать полученный NodeList
к Program
.
for file in Glob('*.c'):
sources += env.CodeGenerator(file)
env.Program('say_hello', sources)
Это хорошо работает, когда я не изменяю никаких переменных. Я получаю исполняемый файл, используя gcc
.
Однако, когда я пытаюсь заменить соответствующие переменные, так что SCons использует пользовательскую инструментальную цепочку (используя env.Replace(CC='clang')...
), создается только один файл сборки. Мой заказ Builder
не вызывается на любой другой файл и SCons пытается связать только с одним файлом объекта (который, очевидно, не получится)
- Как я могу сделать SCons запустить построитель всех файлов и включают в себя те объектные файлы для связывания ?
- Есть ли лучший способ выполнить то, что я пытаюсь сделать? ? Я только начинаю работать со SCons.
Даже после предлагаемого исправления, я продолжаю обращенную тот же вопрос. Но спасибо за замечание о дополнительной документации на странице руководства. Вы были правы, я имел в виду только руководство пользователя. Будут исследовать дальше и отчитываться, если я удастся. – Buzzy
Какую версию вы используете? –
Установлен с использованием Homebrew на Mac: script: v2.1.0.r5357 engine: v2.1.0.r5357 – Buzzy