scons實踐筆記(1)--hello world

    好久沒記筆記了,又是虎頭蛇尾,慚愧!scons是下一代構建工具,學習RT-Thread OS時接觸到的,小試一下感覺還是挺好用的,便打算細細學習一番,以用在以後的開發中,工欲善其事,必先利其器嘛,不要急,慢慢來。

    假設已安裝Python環境(必須),scons官網下載安裝包,解壓,然後以命令行進入解壓縮後的目錄,執行python setup.py install即可,注意這裏需要root權限,如果安裝在其它目錄則使用python setup.py install --prefix=$HOME這樣的命令,當然$HOME可以換成其它路徑,不過要注意權限。其它安裝事項,見解壓目錄下的README.txt。


   第一個例子,hello world的交叉編譯:

> mkdir hello_world

> cd hello_world

> vim main.c

#include <stdio.h>
int main(void)
{
    printf("hello,world!\n");
    return 0;
}

> vim SConstruct

EXE_PATH = '/opt/arm-2007q1/bin'
PREFIX = 'arm-none-linux-gnueabi-'
ARMCC = PREFIX + 'gcc'
ARMAS = PREFIX + 'gcc'
ARMAR = PREFIX + 'ar'
ARMLINK = PREFIX + 'gcc'
ARMSIZE = PREFIX + 'size'
ARMOBJDUMP = PREFIX + 'objdump'
ARMOBJCPY = PREFIX + 'objcpy'

src = Glob('*.c')
env = Environment (AS = ARMAS,
                   CC = ARMCC,
                   AR = ARMAR,
                   LINK = ARMLINK)

env.PrependENVPath ('PATH',EXE_PATH)

env.Program(source = src, target = 'hello_world')

> ls 
main.c  SConstruct 

> scons 
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
arm-none-linux-gnueabi-gcc -o main.o -c main.c
arm-none-linux-gnueabi-gcc -o hello_world main.o
scons: done building targets.

> ls
main.c  main.o  hello_world  SConstruct


src = Glob("*.c")是參與編譯的文件的定義,是當前目錄下的所有以.c結尾的源文件,在這裏只有一個main.c;再接下來的兩句env = Environment(...)和env.PreendENVPath(...)指定所使用的編譯器和具體路徑(這裏稍微複雜),若缺省則默認使用GCC;最後一句,指定參與編譯文件和最終生成的可執行文件的名稱(即hello_world)。

將可執行文件hello_world以某種方式傳輸到arm平臺下即可執行

> scons -c
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Cleaning targets ...
Removed main.o
Removed hello_world
scons: done cleaning targets.

> ls
main.c  SConstruct

scon 相當於make,而scons -c 相當於 make clean


幾點說明:

(1)默認的編譯器是gcc,如果想要用到其它交叉編譯器,則需要額外設置一些東西了。

(2)覺得scons 與 make最大 的不同,在於不需要指定依賴關係,也不需要指定每個命令的具體動作,這些完全是由scons自動完成的,比如:不必像makefile那樣需要指定make和make clean時要執行的具體動作。這習慣了make的我對這有點不適應,總覺得有點不太放心。好在可以手動干預這個過程,以達到我們想要的目的。

(3)scons 是基於python開發,在使用scons的同時可以使python腳本,這就允許自己藉助python的力量寫出各種各樣的工具來滿足各種需求,這纔是真正比make強大的地方。

(4)現在才發現,最好的scons學習資料就是官網的scons 用戶手冊,不要再到處找資料了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章