Scons使用一二

2021-09-02 23:40:06 字數 3790 閱讀 1675

無意中看到了乙個用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,具體可設定如下:

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']

)

object編譯好之後,就可以生成可執行檔案了:

program('simulator_linux.bin', obj, libs=['pthread'])
program表示我們需要編譯的target是可執行檔案

『simulator_linux.bin』 指定了可執行檔案的名字

obj就是我們剛剛上面編譯後的objects

libs指定了我們需要鏈結的lib庫為pthread.

okay,全部搞定,在sconstruct檔案所在目錄執行』scons』就可以直接編譯了,使用』scons -c』就可以清除掉編譯出來的所有檔案。

效果如下:

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

完整**見github.

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...