Создание нескольких исполняемых файлов с похожими правилами

Я пишу что-то вроде интерактивный учебник по C ++. Учебник будет состоять из двух частей: одна скомпилирована в библиотеку (я использую Scons для ее создания), а другая (уроки) поставляется вместе с учебником, который будет скомпилирован конечным пользователем. В настоящее время я ищу хороший и простой способ для людей построить эти уроки.

По сути, вторая часть - это каталог со всеми уроками в нем, каждый в своем собственном каталоге. В каждом уроке будет как минимум файл lesson.cpp и файл main.cpp , могут быть и другие файлы, о существовании которых я не узнаю, пока он не будет отправлен - - их создаст конечный пользователь. Это будет выглядеть примерно так:

all_lessons/
    helloworld/
        lesson.cpp
        main.cpp
    even_or_odd/
        lesson.cpp
        main.cpp
    calculator/
        lesson.cpp
        main.cpp
        user_created_add.cpp

Каждый из них должен быть скомпилирован почти по одним и тем же правилам, и команда для компиляции должна иметь возможность запускаться из одного из каталогов урока ( helloworld / и т. д.).

Поскольку остальная часть проекта построена с использованием Scons, было бы разумно использовать его и для этой части. Однако Scons ищет файл SConstruct в каталоге, из которого он запускается: допустимо ли разместить файл SConstruct в каждом каталоге урока, а также SConscript ] в каталоге all_lessons / , в котором приведены общие правила? Похоже, это идет вразрез с типичным способом организации проектов, который Scons ожидает от проектов: каковы потенциальные подводные камни этого подхода? Могу ли я поместить файл SConstruct вместо файла SConscript и тем самым сделать возможным сборку из любого каталога (полагаю, используя экспорт, чтобы избежать бесконечной рекурсии)?

Кроме того, в какой-то момент я могу захотеть заменить файл lesson.cpp с lesson.py , который генерирует необходимые файлы; позволят ли мне Scons сделать это легко с помощью сборщиков, или есть более удобный фреймворк?

В конце я хочу получить следующее (или эквивалентное с другими системами сборки):

all_lessons/
    SConstruct
    helloworld/
        SConstruct
        lesson.cpp
        main.cpp
    even_or_odd/
        SConstruct
        lesson.py
        main.cpp
    calculator/
        SConstruct
        lesson.cpp
        main.cpp
        user_created_add.cpp

Запуск scons все в каталоге all_lessons потребует:

  • Запустить even_or_odd / lesson.py , чтобы сгенерировать even_or_odd / lesson.cpp .
  • Поймите, что user_created_add.cpp также необходимо скомпилировать.
  • Создать исполняемый файл для каждого урока.

Запуск scons в even_or_odd / ] или scons even_or_odd в all_lessons / должен создать исполняемый файл, идентичный приведенному выше (те же флаги компиляции).

Резюме:

  1. Подходит ли Scons для / способно ли это?
  2. Хорошо ли работают Scons, когда файлы SConscript находятся над файлами SConstruct ?
  3. Хорошо ли работают Scon с несколькими SConstrcut ] для одного проекта, SC собирает друг друга?
  4. Подходит ли система компоновки Scons для использования скриптов Python для генерации файлов C ++?
  5. Есть ли какое-то преимущество использования другой системы сборки / написания моей собственной платформы сборки, которую я ' m отсутствует?

Любые дальнейшие комментарии, конечно, приветствуются.

Спасибо.

6
задан Anton Golov 25 August 2011 в 09:27
поделиться