环境
外部环境
用户在执行 SCons
的外部环境变量设置是,可以使用 python
的 os.ennviron
模块,可以将 import os
放在任意 SConstruct
中,并在该文件中使用用户外部环境变量。
import os
env = os.environ
print("current OS is", env["OS"])
执行 socns
结果就是 ‘Windows_NT’,对此,认为可以使用用户环境变量或者是系统环境变量。
admin@DESKTOP-NQU1HUV C:\Users\admin\Desktop\scons\day6
$ scons -Q
('current OS is', 'Windows_NT')
scons: `.' is up to date.
特此说明,SCons
可以使用大部分 python
中的语法、环境、库等信息,模块调用也可以共享。
本地环境
在一个构建环境中,可以对环境内容进行设置,例如设置不同编译器,优化等级,库文件,头文件搜索路径或者其他参数,此时需要使用 Environment
相关函数。
创建一个环境
env = Environment(CC='gcc', CCFLAGS='-O2')
env.Program('hello.c')
执行 scons
之后的结果就是下面结果,可以看出和之前不同的是,编译语句增加了 -O2
的优化等级,和设置的一致。
admin@DESKTOP-NQU1HUV C:\Users\admin\Desktop\scons\day6
$ scons -Q
gcc -o hello.o -c -O2 hello.c
gcc -o hello.exe hello.o
除了可以设置环境变量之外,也可以通过 get
函数获取变量的值,并打印输出。
env = Environment()
print("CC is: %s" % env['CC'])
print("LATEX is: %s" % env.get('LATEX', None))
执行 scons
之后的结果就是下面结果,默认编译器就是 gcc
, LATEX
变量没有值,使用了设置的默认值 None
。
admin@DESKTOP-NQU1HUV C:\Users\admin\Desktop\scons\day6
$ scons -Q
CC is: gcc
LATEX is: None
scons: `.' is up to date.
查看默认 SCons
的默认变量,可以使用下面语句:
env = Environment()
for item in sorted(env.Dictionary().items()):
print("construction variable = '%s', value = '%s'" % item)
# 或者
env = Environment()
print(env.Dump())
命令行参数
增加 help 语句
在一个命令不知道怎么使用时,使用 --help
来获取当前命令的选项帮助是最好的方法。SCons 也是提供了 help
选项的编写,可以帮助用户简单的创建 --help
的语句。
Help("""
Type: 'scons program' to build the production program,
'scons debug' to build the debug version.
""")
admin@DESKTOP-NQU1HUV C:\Users\admin\Desktop\scons\day6
$ scons -h
scons: Reading SConscript files ...
scons: done reading SConscript files.
Type: 'scons program' to build the production program,
'scons debug' to build the debug version.
Use scons -H for help about command-line options.
使用 -H
可以看有关 SCons
的帮助文档。
admin@DESKTOP-NQU1HUV C:\Users\admin\Desktop\scons\day6
$ scons -H
usage: scons [OPTION] [TARGET] ...
SCons Options:
-b, -d, -e, -m, -S, -t, -w, --environment-overrides, --no-keep-going,
--no-print-directory, --print-directory, --stop, --touch
Ignored for compatibility.
-c, --clean, --remove Remove specified targets and dependencies.
-C DIR, --directory=DIR Change to DIR before doing anything.