调试
在一个大型构建项目中,编写构建脚本可能会遇到各种问题,此时如果没有一个合适的
debug
方法,是会让开发人员 “发疯” 的,所以在
SCons
中提供了调试方法,可以指出当前正在做的工作,以及是否出现错误和错误类型与内容。
–debug=explain
Command('hello/hello_copy.c', 'hello/hello.c', Copy("$SOURCE", "hello/hello_ccccc.c"))
可以看到在使用
--debug=explain
前后,输出窗口有明显不同,添加上
--debug=explain
选项后,在需要复制的源文件不存在时,会进行说明,方便开发者在执行构建之后,对构建过程进行分析,定位问题。
admin@DESKTOP-NQU1HUV C:\Users\admin\Desktop\scons\day11
$ scons -Q -c && scons -Q
Copy("hello\hello.c", "hello/hello_ccccc.c")
scons: *** [hello\hello_copy.c] hello/hello_ccccc.c\*.*:
admin@DESKTOP-NQU1HUV C:\Users\admin\Desktop\scons\day11
$ scons -Q -c && scons -Q --debug=explain
scons: building 'hello\hello_copy.c' because it doesn't exist
Copy("hello\hello.c", "hello/hello_ccccc.c")
scons: *** [hello\hello_copy.c] hello/hello_ccccc.c\*.*:
–warn=target-not-built
可以使用
--warn=target-not-built
在目标未正常编译的情况下,给出警告。
Dump
使用
env.Dump()
可以查看当前环境变量内部的所有配置项结果。
env = Environment()
print(env.Dump())
admin@DESKTOP-NQU1HUV C:\Users\admin\Desktop\scons\day11
$ scons -Q
{ 'AR': 'ar',
'ARCOM': '$AR $ARFLAGS $TARGET $SOURCES',
'ARFLAGS': ['rc'],
'AS': 'as',
'ASCOM': '$AS $ASFLAGS -o $TARGET $SOURCES',
'ASFLAGS': [],
'ASPPCOM': '$CC $ASPPFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -c -o $TARGET $SOURCES',
'ASPPFLAGS': '$ASFLAGS',
'BUILDERS': {'Zip': <SCons.Builder.BuilderBase
......
}
返回的值内容比较丰富,不易于阅读,所以可以通过传入参数,来查看某一个key所对应的值
env = Environment()
print(env.Dump('ENV'))
admin@DESKTOP-NQU1HUV C:\Users\admin\Desktop\scons\day11
$ scons -Q
{ 'COMSPEC': 'C:\\Windows\\system32\\cmd.exe',
'PATH': 'C:\\Windows\\System32;c:\\MinGW\\bin',
'PATHEXT': '.COM;.EXE;.BAT;.CMD',
'SystemDrive': 'C:',
'SystemRoot': 'C:\\Windows',
'TEMP': 'C:\\Users\\admin\\AppData\\Local\\Temp',
'TMP': 'C:\\Users\\admin\\AppData\\Local\\Temp'}
scons: '.' is up to date.
–tree
可以在命令行,添加
--tree
来查看中间文件和目标文件的依赖关系。
hello_list = Object('hello/hello.c')
hello2_list = Object('hello2/hello2.c')
Program(hello_list + hello2_list)
可以从输出界面看到每个文件都是有依赖的,不管是中间目标文件还是最终的可执行文件。
admin@DESKTOP-NQU1HUV C:\Users\admin\Desktop\scons\day11
$ scons -Q --tree=all
scons: '.' is up to date.
+-.
+-hello
| +-hello\hello.c
| +-hello\hello.exe
| | +-hello\hello.o
| | | +-hello\hello.c
| | | +-C:\MinGW\bin\gcc.EXE
| | +-hello2\hello2.o
| | | +-hello2\hello2.c
| | | +-hello2\inc.h
| | | +-C:\MinGW\bin\gcc.EXE
| | +-C:\MinGW\bin\gcc.EXE
| +-hello\hello.o
| +-hello\hello.c
| +-C:\MinGW\bin\gcc.EXE
+-hello2
| +-hello2\hello2.c
| +-hello2\hello2.o
| | +-hello2\hello2.c
| | +-hello2\inc.h
| | +-C:\MinGW\bin\gcc.EXE
| +-hello2\inc.h
+-SConstruct
可以使用下面的方式,指定对某一个文件查看依赖情况。
scons -Q --tree=all f2.o
status
--status
可以查看当前目录下所有文件的状态。
% scons -Q --tree=status
cc -o f1.o -c -I. f1.c
cc -o f2.o -c -I. f2.c
cc -o f3.o -c -I. f3.c
cc -o prog f1.o f2.o f3.o
E = exists
R = exists in repository only
b = implicit builder
B = explicit builder
S = side effect
P = precious
A = always build
C = current
N = no clean
H = no cache
[E b ]+-.
[E C ] +-SConstruct
[E C ] +-f1.c
[E B C ] +-f1.o
[E C ] | +-f1.c
[E C ] | +-inc.h
[E C ] +-f2.c
[E B C ] +-f2.o
[E C ] | +-f2.c
[E C ] | +-inc.h
[E C ] +-f3.c
[E B C ] +-f3.o
[E C ] | +-f3.c
[E C ] | +-inc.h
[E C ] +-inc.h
[E B C ] +-prog
[E B C ] +-f1.o
[E C ] | +-f1.c
[E C ] | +-inc.h
[E B C ] +-f2.o
[E C ] | +-f2.c
[E C ] | +-inc.h
[E B C ] +-f3.o
[E C ] +-f3.c
[E C ] +-inc.h
其余可以查看官方帮助文档
官方介绍完结,撒花。。
版权声明:本文为jeek_we原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。