linux scons 實用說明(一) g選項

2021-07-11 04:38:58 字數 2009 閱讀 4959

還在為寫乙個makefile發愁嗎?還在為難記的make引數而苦惱嗎?有了scons一切都邊的簡單了。最近研究了下scons,發現和makefile相比,soncs編譯c和c++程式真的太方便了。搞程式什麼做好,當然是簡單實用最好下面大家就一起感受下簡單的scons吧。

1、使用scons編譯程式

在程式目錄下執行命令如下:(前提是你已經安裝scons了喲)

scons        

噢,噢,這個好像沒啥簡單的哈,和make差不多嘛。是嗎?那就繼續瞧好吧您

2、清空編譯程式

在程式目錄下執行命令如下

scons -c

這個嘛,,沒什麼吧,和make clean也沒簡單多少呀,不就少了幾個字母嗎,是嗎?那咱還繼續吧

3、將cpp或c檔案編譯為執行檔案

在源檔案目錄中建立乙個sconstruct的檔案,並在其中新增如下內容

program('testpro1', glob('*.cpp'))

儲存後執行1中的scons命令

這就完事了??是的!這就完事了,只要你程式的語法沒錯,應該會生成乙個名字叫testpro1的程式,如果在window下會生成乙個testpro1.exe的程式喲,有沒有很酷?

將cpp或c檔案編譯為執行檔案有如下2中方式

方式1:

program('程式名', split('程式檔案序列

空格分隔'))  

方式2:

program('程式名', glob('*.cpp'))  

4、編譯的時候想新增上-g -o2 -wall引數

使用環境變數

env=environment(ccflags = ['-g','-o3','-wall'])  

生成程式的時候使用env.program(。。。。)即可

例如:env=environment(ccflags = ['-g','-o3','-wall'])  

env.program('程式名', glob('*.cpp'))

5、編譯生成靜態庫

方法1:使用library關鍵字

library('庫名', split('程式檔案序列,空格分隔')

或library('庫名', glob('*.cpp'))

方法2:使用顯示關鍵字staticlibrary

staticlibrary('庫名', split('程式檔案序列,空格分隔'))

或staticlibrary('庫名', glob('*.cpp'))

說明:庫名不要前面的lib和字尾,如庫libtestdota.a生成時的庫名為testdota

6、編譯生成動態庫

使用關鍵字sharedlibrary

sharedlibrary('庫名', split('程式檔案序列,空格分隔'))

或sharedlibrary('庫名', glob('*.cpp'))

說明:庫名不要前面的lib和字尾,如庫libtestso.so生成時的庫名為testso

7、程式或庫中引用已有的庫

使用關鍵字libs和libpath

libs後跟程式需要引用的庫名

libpath後跟程式引用庫的時候所需的庫檔案路徑

如:program('testpro','prog.c', libs = ['m','m2'], libpath = ['/usr/lib', '/usr/local/lib'])

生成的testpro程式要引用庫libm.so和libm2.so,庫檔案路徑在/usr/lib和/usr/local/lib下

8、指定程式編譯過程中需要查詢的標頭檔案路徑

使用關鍵字cpppath

例如:program('hello','hello.c', cpppath = ['include', '/home/project/inc'])

生成hello程式的時候hello.c可能引用了其他的標頭檔案,在編譯hello.c的時候會查詢./include和/home/project/inc下是否有需要的標頭檔案

到此一些常用的makefile的功能基本都有了,有沒有覺得很簡單那

scons 實用說明(一)

還在為寫乙個makefile發愁嗎?還在為難記的make引數而苦惱嗎?有了scons一切都邊的簡單了。最近研究了下scons,發現和makefile相比,soncs編譯c和c 程式真的太方便了。搞程式什麼做好,當然是簡單實用最好下面大家就一起感受下簡單的scons吧。1 使用scons編譯程式 在程...

JS 函式實用說明

1 匿名函式 function 2 函式表示式 var add function 注 函式表示式為變數賦值,故必須先宣告再呼叫,否則報錯 3 函式宣告 function add 注 函式宣告,由於提公升作用,故可以在宣告前呼叫 4 自動執行函式 a 通過運算子實現自動執行函式 function 注 ...

Linux下實用檔案說明

實用檔案說明 目錄說明 etc sysconfig network scripts ifcfg eth0 配置網路位址以及gw等 etc resolv.conf 設定本機的客戶端dns etc hosts 設定使用者ip與名字 或網域名稱 的對應表,相當於本地lan內的dns etc sysconf...