我正在寫一些類似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/等)運行??吹皆擁椖康钠溆嗖糠质怯蒘cons構建的,將其用于此部分也很有意義。但是,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.cppscons all在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/將產生與以上命令相同的可執行文件(相同的編譯標志)。摘要:Scons是否適合/能夠做到這一點?SConscript文件上方的SConstruct文件時,Scons是否工作正常?Scons是否可以很好地與SConstrcut一個項目的多個文件相互兼容?Scons構建器系統是否適合使用Python腳本生成C ++文件?使用其他構建系統/編寫自己缺少的構建框架有什么優勢嗎?任何進一步的評論,當然是受歡迎的。謝謝。
3 回答

當年話下
TA貢獻1890條經驗 獲得超9個贊
從課程目錄運行編譯命令是否至關重要?如果沒有,那么我將親自創建具有以下內容的all_lessons / makefile:
lessons = helloworld even_or_odd calculator
all: $(lessons)
# for each $lesson, the target is $lesson/main built from $lesson/main.cpp and $lesson/lesson.cpp
# NB: the leading space on the second line *must* be a tab character
$(lessons:%=%/main): %/main: %/main.cpp %/lesson.cpp
g++ -W -Wall $+ -o $@
然后,可以在all_lessons目錄中使用“ make”或“ make all”構建所有課程,或者使用“ make helloworld / main”構建特定課程。
- 3 回答
- 0 關注
- 571 瀏覽
添加回答
舉報
0/150
提交
取消