SCons - 簡單而強大的項目編譯腳本


N年前學的makefile,當時還勉強能寫一些簡單的工程編譯,現在已經基本忘了。makefile確實編寫復雜,而且平時也不是經常使用,容易忘記。偶識了scons,一切都變的簡單了。最近研究了下scons,原來需要上百行的makefile編譯過程,現在只需要十行不到,而且沒有makefile那些繁雜的結構語法,完全使用python語言就可以進行編譯腳本編寫,非常好記憶和編譯一些大的工程。

直接使用apt-get install scons命令就可以完成安裝,需要python環境。

Scons命令

scons:進行代碼文件編譯

scons -Q:進行代碼文件編譯,不顯示Scons內部操作打印的信息,只顯示編譯信息

scons -c:清除編譯中間文件和可執行文件

Scons編譯腳本

Scons對應的編譯腳本名稱為SConstruct,就如同make對應的編譯腳本為makefile

SConstruct腳本編寫

編譯函數

Program():執行編譯操作,生成可執行文件

Library():執行編譯操作,生成靜態庫

StaticLibrary():執行編譯操作,生成靜態庫

SharedLibrary():執行編譯操作,生成動態庫

Environment():編譯環境

編譯參數

target,生成的執行文件名字

source,編譯文件

LIBS,依賴庫

LIBPATH,依賴庫路徑,有環境變量的可不添加,針對用戶庫或第三方庫

CPPPATH,頭文件路徑

CCFLAGS,編譯參數

其他函數

Split():將字符串分隔為列表

Glob('*.cpp'):加入所有文件

編譯參數可以以任意順序加入編譯函數,編譯函數依據編譯參數對代碼文件進行編譯。

一個簡單例子

將文件放在當前目錄,頭文件放在上級目錄。

 

1 str = Split('main.cpp display.cpp')
2 Program('main',str,CPPPATH = '../'i,LIBS = 'pthread')

一個復雜項目的例子

大多項目都可以套用的格式,Program內參數多個文件需要以python列表形式作為入參,這里可以用Split對文件字符串分隔為列表輸入。直接用Glob('*.cpp')包含當前目錄所有需要編譯的cpp文件。

 1 TARGETNAME = 'server'
 2   
 3 LIB = Split('jsoncpp logger ACE basetool tinyxml pthread dl rt')
 4 
 5 FILELIST = Glob('*.cpp')
 6  
 7 HEADFILEPATH = Split('../../common/include ../../3rd/ACE_wrappers ../../3rd/include/')
 8  
 9 LIB_DIR = Split('../../3rd/lib ../../common/lib')
10  
11 Program(target = TARGETNAME,source = FILELIST,LIBS = LIB,CPPPATH = HEADFILEPATH,LIBPATH = LIB_DIR)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM