Scons: настроить сборщиков по умолчанию - PullRequest
0 голосов
/ 15 октября 2019

У меня есть встроенное программное обеспечение, полностью написанное на C и Assembly, и для его сборки я использую Scons и GCC. Исходный код организован в разные папки, и каждая папка представляет собой «отдельный» подпроект (т. Е. Приложение elf, статический libray и т. Д.).

Основной файл SConstruct, расположенный внутри главной папкиproject, создает среду по умолчанию, добавляя в нее некоторые флаги компиляции, общие для всех подпроектов, затем вызывает SConscripts, помещенные в каждый подпроект, экспортируя среду по умолчанию.

Каждый подпроект создаетновая среда клонирует среду по умолчанию и настраивает ее с помощью новых компоновщиков, новых флагов компиляции и т. д.

Проблема возникает из-за того, что мне нужно добавить для всех подпроектов некоторые действия после компиляции каждого объектного файла. Короче говоря, мне нужно сгенерировать предварительно обработанный файл для каждого ".c" и ".S", вызывая препроцессор с теми же флагами, которые используются при обычной компиляции. Я думаю, что для этого лучше всего добавить флаг компиляции "-save-temps = obj" в среду по умолчанию (этот флаг указывает компилятору сохранить временные файлы), чтобы все подпроекты унаследовали это поведение.

Проблема в том, что SCons не отслеживает каждый сгенерированный временный файл. Учитывая, что:

  • для каждого файла .c, gcc создаст два временных файла .i и .s
  • для каждого файла .S, gcc создаст один временный файл. s

Мне нужно добавить в конструктор объектов по умолчанию:

  • SideEffect, чтобы сообщить scons, что при компиляции .c в .o будет создан и файл .i;
  • SideEffect, сообщающее scons, что компиляция .c to .o создаст также файл .s;
  • SideEffect, сообщающий scons, что компиляция .S to .o также создаст.s file;

Есть ли способ сделать это только с помощью суффиксов файлов и без перечисления каждого целевого объектного файла?

Кроме того, для каждого временного файла мне нужновызвать пользовательский инструмент, снова с теми же флагами компиляции, которые использовались для его компиляции, чтобы создать другие файлы с другой отладочной информацией. Как я могу это сделать? Есть ли способ добавить пост-действие в конструктор объектов?

Спасибо,

Ciro

...