Определить список исходных файлов (*. [Ch]) для сложной сборки с помощью scons. - PullRequest
6 голосов
/ 02 сентября 2011

Предположим, у вас есть сложное дерево исходников для проекта C, множество каталогов с множеством файлов.Сборка scons поддерживает несколько целей (i386, sparc, powerpc) и несколько вариантов (отладка, выпуск).В корне есть sconstruct (ссылающийся на различные sconscripts), который делает правильные вещи для всех из них, когда вызывается с аргументами, указывающими цель и вариант, например, scons target=i386 variant=release.

Есть ли простой способопределить, какие исходные файлы (* .c и * .h) будет использовать каждая из этих сборок (все они немного отличаются)?Моя теория заключается в том, что scons все равно должен вычислять этот набор файлов, чтобы знать, какие файлы компилировать и когда перекомпилировать.Может ли он предоставить эту информацию?

Что я делаю не хочу сделать:

  • Записать подробную сборку и выполнить ее постобработку (вероятно, не скажу *.h файлы в любом случае)
  • find . -name '*.[ch]' также печатает ненужные файлы для юнит-тестирования и других целей и не относится к конкретным целям

В идеале я хотел бы сделать scons target=i386 variant=release printfileset и посмотреть правильныесписок *. [ch] файлов.Этот список может затем использоваться в качестве входных данных для других инструментов, таких как doxygen.

1 Ответ

3 голосов
/ 05 сентября 2011

Здесь собраны несколько вопросов:

  • Вы можете запретить SCons запускать компилятор, используя флаг --dry-run
  • Вы можете получить дерево зависимостей.из SCons, используя --debug = tree или --tree = all flags, в зависимости от того, какую версию вы используете
  • Учитывая список файлов, по одному на строку, вы можете использовать grep для фильтрации тольковещи, которые вам интересны.

Когда вы соберете все это вместе, вы получите что-то вроде:

scons target=i386 variant=release printfileset -n --tree=all | egrep -i '^ .*\.(c|h|cpp|cxx|hpp|inl)$'
...