SCons命令 之 從入門到精通

轉自:http://blog.csdn.net/sharpljc/article/details/5526261

sconstruct是執行Scons的腳本文件,是Python腳本。
c:>scons 執行sconstruct中腳本
Build command in sconstruct:
1.Program('hello.c') 編譯hello.c可執行文件,根據系統自動生成(hello.exe on Windows; hello on POSIX)
Program('new_hello','hello.c') 指定Output文件名(new_hello.exe on Windows; new_hello on POSIX)
Program(['main.c', 'file1.c', 'file2.c']) 編譯多個文件,Output文件名以第一個文件命名(main.exe;main)
Program('program', Split('main.c file1.c file2.c'))

2.Object('hello.c') 編譯hello.c目標文件,根據系統自動生成(hello.obj on Windows; hello.o on POSIX)
3.Library('foo', ['f1.c', 'f2.c', 'f3.c']) 編譯library
SharedLibrary('foo', ['f1.c', 'f2.c', 'f3.c']) 編譯 static library
StaticLibrary('foo', ['f1.c', 'f2.c', 'f3.c']) 編譯 shared library


4.Program('prog.c', LIBS=['foo', 'bar'], LIBPATH='.') 連接庫,不需加後綴或是前綴
5.判斷源文件是否修改
SourceSignatures('MD5') 根據內容是否改變,默認方式
SourceSignatures('timestamp') 根據修改時間
6.判斷目標文件是否改變
TargetSignatures('build') 根據編譯結果
TargetSignatures('content') 根據文件內容,如果只是加了句註釋,將不會被重新編譯
7.Ignore(hello, 'hello.h') 忽略某個依賴關係
8.Depends(hello, 'other_file') 明確依賴關係

Executive command in shell
1. scons -c clean
2. scons -Q 只顯示編譯信息,去除多餘的打印信息
3. scons -Q --implicit-cache hello 保存依賴關係
--implicit-deps-changed 強制更新依賴關係
--implicit-deps-unchanged 強制使用原先的依賴關係,即使已經改變
Key words:
LIBS
LIBPATH
CCFLAGS
CPPPATH :Program('hello.c', CPPPATH = ['include', '/home/project/inc'])
Concept:
1.Node Objects 文件或是目錄
hello_c = File('hello.c')
Program(hello_c)File Node Objects
classes = Dir('classes')
Java(classes, 'src') Directory Node Objects

xyzzy = Entry('xyzzy') Either File or Directory Node Objects


1.創建環境變量
env = Environment()
env.Program('foo.c') 根據不同系統創建不同的編譯環境變量
也可以改變:
env = Environment(CC = 'gcc',CCFLAGS = '-O2')
2.複製環境變量
env = Environment(CC = 'gcc')
opt = env.Copy(CCFLAGS = '-O2')
dbg = env.Copy(CCFLAGS = '-g')

3.獲取環境變量
env = Environment()
print "CC is:", env['CC']
4.擴展環境變量
env = Environment()
print "CC is:", env.subst('$CC')
5.替換環境變量
env = Environment(CCFLAGS = '-DDEFINE1')
env.Replace(CCFLAGS = '-DDEFINE2')
env.Program('foo.c')
6.尾部增加環境變量值
env = Environment(CCFLAGS = '-DMY_VALUE')
env.Append(CCFLAGS = ' -DLAST')
env.Program('foo.c')
7.頭部添加環境變量值
env = Environment(CCFLAGS = '-DMY_VALUE')
env.Prepend(CCFLAGS = '-DFIRST ')
env.Program('foo.c')
使用
1.看編譯命令未展開
Input:
env = Environment(CCFLAGS = '-DFOO')
print "CCCOM is:", env['CCCOM']
Output:
CCCOM is: $CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -c -o $TARGET $SOURCES

2.看編譯命令已展開
Input:
env = Environment(CCFLAGS = '-DFOO')
print "CCCOM is:", env.subst('$CCCOM')
Output:
CCCOM is: gcc -DFOO -c -o

 

祥細的原始使用方法參考:http://www.scons.org/doc/production/HTML/scons-man.html

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