亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用相似的規則構建多個可執行文件

使用相似的規則構建多個可執行文件

C++
白衣染霜花 2019-11-20 10:41:09
我正在寫一些類似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”構建特定課程。


查看完整回答
反對 回復 2019-11-20
  • 3 回答
  • 0 關注
  • 571 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號