1231_使用SCons实现多目录多文件且跨目录引用的编译环境搭建(linux + gcc)
全部學習匯總: GitHub - GreyZhang/g_SCons: A new member in my toolbox, looking forward to replacing make tool later.
這個例子在我看到的文檔中是沒有的,但是這個卻是我一直想要看到的一個狀態。因為,多目錄、多文件、相互交叉引用的應用才算得上是一個實用工程的功能典型代表。為了能夠做相應的驗證,我自己創建了一個簡單的工程,工程中包含了5個簡單的模塊。具體的目錄信息如下:
一共有5個目錄,10個文件。除了main模塊之外,每一個目錄中都包含一對兒文件,分別有一個C文件和一個頭文件。其中,comm這個模塊作為共用的模塊會被其他的每一個模塊引用。而main作為一個集中的程序模塊,包含一個main函數并且調用其他所有模塊的函數。這樣,一個基礎的示范工程就基本就緒了。另外,在根目錄的位置放了SCons的配置文件。
如果要實現這樣的工程的管理,按照之前的基礎的知識需要完成的主要內容需要有:
1,指明工程的可執行文件的名字;
2,需要知道接下來需要處理的代碼文件都是哪些;
3,為了能夠讓SCons找到被引用的頭文件,需要指明頭文件所在的目錄。
如此,SConstruct的構建比較簡單了。需要說明的是,CPPPATH其實只能夠指明頭文件的搜索目錄,但是無法指明C文件的搜索目錄。我覺得應該還會有一個類似的功能讓我們的配置寫得更加簡潔。但是,目前在找到這個答案之前我采用的方法是通過相對目錄的方式直接給每一個文件指明所在的目錄。
如此,我的配置文件內容如下:
如此,我期望我自己的工程編譯出來的可執行文件名稱是test。
這是編譯測試的效果,看起來還是可以的。
從前面的信息基本知道,現在默認的編譯差異判斷是根據MD5校驗和來判斷的。接下來,我改變幾個文件的時間戳來試一下,是否會出現新的重新編譯。
從結果看,其實是沒有發生變化的。接下來,我在test.h中增加一行注釋,看看接下來的效果。
為了能夠有明顯的對比效果,我等待一分鐘后進行編譯測試。
可以看得出來,有新的編譯效果。但是test其實是沒有更新的,這就是前面看文檔的時候看到的一個節省編譯效果的一個例子了。
接下來,嘗試讓這個行為更像make的模式。在配置文件中增加Decider('make')后測試:
可以看的出來,現在基本上是一個make的行為了。
那么如何可以確認實現一個混合模式的編譯呢?其實還是可以通過注釋來處理,如果修改了注釋,時間戳發生了變化接下來就會去執行MD5校驗和的計算。但是,目標文件不會發生變化,因此test不會更新。但是,在進行大量的文件判斷處理的時候這樣是有優勢的變化的。
從上面的時間戳信息可以看得出與我們期待一致的結論。
這樣,不僅僅是把基礎的環境搭建嘗試了一下,還嘗試了不同的編譯差分判斷模式。如果習慣性考慮,直接采用make的模式應該就是不錯的選擇了。
最后,測試了一下并行編譯的功能。也是可以直接支持使用的,而且從滾屏的速度上的確是看到了速度上的差異。編譯之后的軟件執行跟之前的效果也是一致的。
總結
以上是生活随笔為你收集整理的1231_使用SCons实现多目录多文件且跨目录引用的编译环境搭建(linux + gcc)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电信无线光猫设置方法(附以中兴F460为
- 下一篇: 基于3个操作系统的靶场,从零开始做安全渗