亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

scons使用

2024-06-28 14:32:30
字體:
來源:轉載
供稿:網友

1.概述

    scons是一個Python寫的自動化構建工具,和GNU make相比優點明顯:
    A.移植性:python能運行的地方,就能運行scons
    B. 擴展性:理論上scons只是提供了python的類,scons使用者可以在這個類的基礎上做所有python能做的事情。比如想把一個已經使用了Makefile大型工程切換到scons,就可以保留原來的Makefile,并用python解析Makefile中的編譯選項、源/目標文件等,作為參數傳遞給scons,完成編譯。
    C. 智能:Scons繼承了autoconf/automake的功能,自動解析系統的include路徑、typedef等;“以全局的觀點來看所有的依賴關系”

2.scons文件

    scons中可能出現的文件:
        SConstruct,Sconstruct,sconstruct,SConscript

    scons將在當前目錄以下次序 SConstruct,Sconstruct,sconstruct 來搜索配置文件,從讀取的第一個文件中讀取相關配置。
    在配置文件SConstruct中可以使用函數SConscript()函數來定附屬的配置文件。按慣例,這些附屬配置文件被命名為”SConscript”,當然也可以使用任意其它名字。

3.scons的命令行參數

1     scons: 執行SConstruct中腳本2     scons -c   clean3     scons -Q  只顯示編譯信息,去除多余的打印信息4     scons -Q   --implicit-cache hello 保存依賴關系5                    --implicit-deps-changed   強制更新依賴關系6                    --implicit-deps-unchanged  強制使用原先的依賴關系,即使已經改變

4.SConstruct提供的方法

4.1 PRogram:生成可執行文件

1     Program('hello.c')                         //編譯hello.c可執行文件,根據系統自動生成(hello.exe on Windows; hello on POSIX)2     Program('hello','hello.c')                    //指定Output文件名(hello.exe on Windows; hello on POSIX)3     Program(['hello.c', 'file1.c', 'file2.c'])            //編譯多個文件,Output文件名以第一個文件命名4     Program(source = "hello.c",target = "hello")5     Program(target = "hello" , source = "hello.c")6     Program('hello', Split('hello.c file1.c file2.c'))       //編譯多個文件7 8     Program(Glob("*.c"))9     src = ["hello.c","foo.c"];Program(src)

4.2 Object:生成目標文件

1     Object('hello.c')                         //編譯hello.c目標文件,根據系統自動生成(hello.obj on Windows; hello.o on POSIX)

4.3 Library:生成靜態/動態庫文件

1 Library('foo', ['f1.c', 'f2.c', 'f3.c'])               //編譯library2 SharedLibrary('foo', ['f1.c', 'f2.c', 'f3.c'])            //編譯 shared library3 StaticLibrary('bar', ['f4.c', 'f5.c', 'f6.c'])            //編譯 static library

 庫的使用:

1  Program('prog.c', LIBS=['foo', 'bar'], LIBPATH='.')        //連接庫,不需加后綴或是前綴

4.4 SourceSignatures:判斷源文件是否修改

1     SourceSignatures('md5')                       //根據內容是否改變,默認方式2     SourceSignatures('timestamp')                  //根據修改時間

4.5 TargetSignatures:判斷目標文件是否改變

1     TargetSignatures('build')                     //根據編譯結果2     TargetSignatures('content')                    //根據文件內容,如果只是加了句注釋,將不會被重新編譯

4.6 Ignore:忽略依賴關系

1     Ignore(hello, 'hello.h')                     //忽略某個依賴關系

4.7 Depends:明確依賴關系

1 Depends(hello, 'other_file')                     //明確依賴關系 

4.8 SConscript:scons的配置文件

    源文件的目錄結構如下:
    src:
    |    SConstruct
    |    test.cpp
    |    mA(目錄):
         |     SConscript
         |     func.cpp
    其中test.cpp為主文件,中調用func.cpp中定義的函數
  
    SConstruct內容如下:

1 env = Environment()2 flags = env.ParseFlags(['-pthread -I/usr/include/stlport ',' -L .'])3 env.MergeFlags(class_flags)4 subobj = SConscript(['mA/SConscript'])5 obj = subobj + env.Object(Glob("*.cpp"))6 env.Program("test",list(obj),LIBS = ['libstlport.a'])

mA/SConscrip如下:

1 obj = Object(Glob("*.cpp"))2 Return("obj")

不出意外的話上邊的工程編譯可以通過,但是運行的時候會Aborted。因為test.cpp,mA/func.cpp都使用了包含string類型的那個類,但是由于編譯環境的不同,test.cpp認為string變量的大小是24字節, mA/func.cpp認為string變量的大小是4個字節(libstlport.a搗的鬼)。

     解決問題的辦法就是環境變量輸出,修改SConstruct和mA/SConscript如下:
    SConstruct:

1 env = Environment()2 flags = env.ParseFlags(['-pthread -I/usr/include/stlport ',' -L .'])3 env.MergeFlags(class_flags)4 Export('env')5 subobj = SConscript(['mA/SConscript'],exports = 'env')6 obj = subobj + env.Object(Glob("*.cpp"))7 env.Program("test",list(obj),LIBS = ['libstlport.a'])

mA/SConscript:

1 Import('env')2 obj = env.Object(Glob("*.cpp"))3 Return("obj")

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人小视频| 国产精品自产拍在线观看中文| 亚洲国产精品视频在线观看| 欧美国产日韩一区二区三区| 69av成年福利视频| 91av成人在线| 日韩中文字幕视频在线| 中文字幕亚洲综合| 国外成人在线视频| 伊人久久久久久久久久| 亚洲日本成人女熟在线观看| 欧美美女18p| 亚洲男人av电影| 秋霞成人午夜鲁丝一区二区三区| 欧美激情高清视频| 日韩成人在线播放| 午夜欧美不卡精品aaaaa| 欧美亚洲在线观看| 色婷婷亚洲mv天堂mv在影片| 久久国产精品亚洲| 国产一区二区黄| 国产精品欧美激情| 国产精品色悠悠| 国产区亚洲区欧美区| 国产视频精品一区二区三区| 久久福利视频网| 欧美综合在线第二页| 中文字幕av一区二区三区谷原希美| 日韩免费看的电影电视剧大全| 日韩中文字幕在线观看| 久久久精品一区二区三区| 久久久日本电影| 日韩毛片在线看| 色av吧综合网| 国产精品第三页| 九九综合九九综合| 欧洲成人性视频| 日韩国产激情在线| 国产日产亚洲精品| 免费97视频在线精品国自产拍| 午夜精品在线视频| 欧美一级视频免费在线观看| 亚洲精品不卡在线| 日韩中文字幕免费看| 久久精品国产亚洲精品| 日韩**中文字幕毛片| 91高清视频免费观看| 成人日韩av在线| 欧美电影免费播放| 日韩在线中文字幕| 国产第一区电影| 亚洲999一在线观看www| 久久久久久av| 欧美亚洲另类视频| 日韩美女激情视频| 国产一区二区香蕉| 欧美激情三级免费| 日韩欧美亚洲范冰冰与中字| 日韩av电影院| 日韩中文字幕精品| 韩国三级电影久久久久久| 成人在线视频福利| 亚洲免费影视第一页| 久久免费视频网| 欧美日韩另类在线| 国语自产精品视频在线看| 亚洲最大的成人网| 日韩精品一区二区三区第95| 成人激情av在线| 色偷偷噜噜噜亚洲男人的天堂| 日韩免费在线电影| 国产91精品最新在线播放| 日韩成人性视频| 欧美视频在线免费看| 97免费视频在线| 欧美精品一区二区三区国产精品| 久99久在线视频| 国产欧美精品xxxx另类| 国产欧美在线播放| 精品久久香蕉国产线看观看亚洲| 亚洲最大激情中文字幕| 91av在线免费观看视频| 77777少妇光屁股久久一区| 欧美肥婆姓交大片| 夜色77av精品影院| 久久乐国产精品| 日本成人精品在线| 性金发美女69hd大尺寸| 亚洲free性xxxx护士白浆| 在线观看欧美视频| 成人国产精品一区二区| 九色精品美女在线| 一区二区欧美激情| 成人免费淫片aa视频免费| 5566成人精品视频免费| 欧美一级在线亚洲天堂| 在线观看精品自拍私拍| 日韩免费在线电影| 日韩美女视频在线观看| 中文字幕在线视频日韩| 亚洲精品乱码久久久久久金桔影视| 国产精品成人观看视频国产奇米| 成人在线精品视频| 亚洲第一福利在线观看| 亚洲自拍小视频免费观看| 亚洲视频视频在线| 亚洲欧洲日本专区| 国产成人在线亚洲欧美| 国产精品∨欧美精品v日韩精品| 欧美电影在线观看| 亚洲精品视频网上网址在线观看| 亚洲精品有码在线| 欧美色欧美亚洲高清在线视频| 国产脚交av在线一区二区| 久久视频这里只有精品| 热久久这里只有| 国产成人极品视频| 欧美激情精品久久久久久免费印度| 最近2019中文字幕第三页视频| 精品国产一区二区三区久久狼5月| 海角国产乱辈乱精品视频| 国产精品久久久久久搜索| 久久99精品久久久久久琪琪| 国产激情999| 亚洲第一天堂无码专区| 日本一区二区三区四区视频| 国产欧美精品一区二区三区-老狼| 久久99国产精品自在自在app| 亚洲成人精品av| 国产国产精品人在线视| 91久久嫩草影院一区二区| 影音先锋日韩有码| 69视频在线免费观看| 国产欧美在线看| 亚洲天堂av图片| 国产一区二区三区在线| 在线视频欧美日韩精品| 97色伦亚洲国产| 国产欧美日韩专区发布| 亚洲一区二区在线播放| 欧美一级片久久久久久久| 欧美成人午夜影院| 热99精品里视频精品| 国产精品入口免费视| 欧美久久久精品| 最新国产成人av网站网址麻豆| 国产精品91久久久久久| 欧美高跟鞋交xxxxxhd| 欧美亚洲伦理www| www亚洲欧美| 91免费在线视频网站| 亚洲人成电影网站| 久久好看免费视频| 91精品国产综合久久香蕉最新版| 欧美—级a级欧美特级ar全黄| 久久五月天色综合| 91青草视频久久| 国产精品丝袜久久久久久不卡| 久久久久久12| 久久精品人人做人人爽| 成人免费大片黄在线播放| 国产日韩在线看片| 日韩精品免费看| 亚洲黄色成人网|