Я пишу что-то вроде интерактивный учебник по 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 /
должен создать исполняемый файл, идентичный приведенному выше (те же флаги компиляции).
Резюме:
SConscript
находятся над файлами SConstruct
? SConstrcut
] для одного проекта, SC собирает друг друга? Любые дальнейшие комментарии, конечно, приветствуются.
Спасибо.