還在為寫乙個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...