無意中看到了乙個用python來寫makefile的工具scons,使用了一下,感覺還不錯,記錄一下。
pip install scons
以之前構建的freertos的simulator做範例。
首先需要在目錄下建立乙個名為sconstruct的檔案,scons通過解析該檔案來進行編譯。
我們在檔案中首先先定義需要編譯哪些objects,具體格式如下:
obj = object([c files], ccflags = '', cpppath = [h files])
其中[c files]指定我們需要編譯哪些c檔案
ccflags指定編譯選項
cpppath指定編譯需要的標頭檔案的路徑
對於我們這個project,具體可設定如下:
object編譯好之後,就可以生成可執行檔案了:obj = object([
'./freertos_kernel/croutine.c',
'./freertos_kernel/list.c',
'./freertos_kernel/queue.c',
'./freertos_kernel/tasks.c',
'./freertos_kernel/portable/gcc/posix/port.c',
'./freertos_kernel/portable/memmang/heap_3.c',
'./src/main.c'
], ccflags= '-duse_stdio=1 -d__gcc_posix__=1',
cpppath =
['./inc', './freertos_kernel/include', './freertos_kernel/portable/gcc/posix']
)
program('simulator_linux.bin', obj, libs=['pthread'])
program表示我們需要編譯的target是可執行檔案
『simulator_linux.bin』 指定了可執行檔案的名字
obj就是我們剛剛上面編譯後的objects
libs指定了我們需要鏈結的lib庫為pthread.
okay,全部搞定,在sconstruct檔案所在目錄執行』scons』就可以直接編譯了,使用』scons -c』就可以清除掉編譯出來的所有檔案。
效果如下:
完整**見github.root@ubuntu:~/desktop/simulator_linux$ scons
scons: reading sconscript files ...
scons: done reading sconscript files.
scons: building targets ...
gcc -o freertos_kernel/croutine.o -c -duse_stdio=1 -d__gcc_posix__=1 -iinc -ifreertos_kernel/include -ifreertos_kernel/portable/gcc/posix freertos_kernel/croutine.c
gcc -o freertos_kernel/list.o -c -duse_stdio=1 -d__gcc_posix__=1 -iinc -ifreertos_kernel/include -ifreertos_kernel/portable/gcc/posix freertos_kernel/list.c
gcc -o freertos_kernel/portable/gcc/posix/port.o -c -duse_stdio=1 -d__gcc_posix__=1 -iinc -ifreertos_kernel/include -ifreertos_kernel/portable/gcc/posix freertos_kernel/portable/gcc/posix/port.c
gcc -o freertos_kernel/portable/memmang/heap_3.o -c -duse_stdio=1 -d__gcc_posix__=1 -iinc -ifreertos_kernel/include -ifreertos_kernel/portable/gcc/posix freertos_kernel/portable/memmang/heap_3.c
gcc -o freertos_kernel/queue.o -c -duse_stdio=1 -d__gcc_posix__=1 -iinc -ifreertos_kernel/include -ifreertos_kernel/portable/gcc/posix freertos_kernel/queue.c
gcc -o freertos_kernel/tasks.o -c -duse_stdio=1 -d__gcc_posix__=1 -iinc -ifreertos_kernel/include -ifreertos_kernel/portable/gcc/posix freertos_kernel/tasks.c
gcc -o src/main.o -c -duse_stdio=1 -d__gcc_posix__=1 -iinc -ifreertos_kernel/include -ifreertos_kernel/portable/gcc/posix src/main.c
gcc -o simulator_linux.bin freertos_kernel/croutine.o freertos_kernel/list.o freertos_kernel/queue.o freertos_kernel/tasks.o freertos_kernel/portable/gcc/posix/port.o freertos_kernel/portable/memmang/heap_3.o src/main.o -lpthread
scons: done building targets.
root@ubuntu:~/desktop/simulator_linux$ ls
freertos_kernel makefile simulator_linux.bin subdir.mk
inc sconstruct src tmp
root@ubuntu:~/desktop/simulator_linux$ scons -c
scons: reading sconscript files ...
scons: done reading sconscript files.
scons: cleaning targets ...
removed freertos_kernel/croutine.o
removed freertos_kernel/list.o
removed freertos_kernel/portable/gcc/posix/port.o
removed freertos_kernel/portable/memmang/heap_3.o
removed freertos_kernel/queue.o
removed freertos_kernel/tasks.o
removed src/main.o
removed simulator_linux.bin
scons: done cleaning targets.
root@ubuntu:~/desktop/simulator_linux$ ls
freertos_kernel inc makefile sconstruct src subdir.mk tmp
scons使用說明
前言 make 這個工具自上個世紀 70 年代 stuart feldman 在貝爾實驗室開發出以來,就一直是類 unix 程式設計師的最愛之一。通過檢查檔案的修改時間,make 工具可以知道編譯目標檔案所要依賴的其他檔案。在複雜的專案中,如果只有少數幾個檔案修改過,make 工具知道僅僅需要對哪些...
scons安裝和使用
1.scons是神馬?scons是linux下的自動構建工具,類似cmake。2.安裝 wget tar zxvf scons 2.2.0.tar.gz cd scons 2.2.0 python setup.py install 正常情況下,scons將安裝到 bin 下 3.hello worl...
scons 使用VariantDir 說明
將編譯生成的檔案和源 目錄相互分離 variantdir variant dir,src dir,duplicate env.variantdir variant dir,src dir,duplicate sconscript script,variant dir,duplicate varian...