Я пытаюсь подготовить систему сборки с использованием SCons. Я хочу использовать clang
для этапа генерации кода и собственный набор инструментов компилятора для всего остального.
По умолчанию в конфигурации 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.