其他分享
首页 > 其他分享> > scons入门(二)

scons入门(二)

作者:互联网

判断是否需要重新编译

SCons很智能,只会编译需要编译的内容。比如我刚执行完scons,再次执行,则会提示scons: . is up to date.。 那么他是如何做到的呢?也不复杂,依赖一个Decider的方法,以及一个.sconsign.dblite文件。

默认情况下,如果文件的md5值改变了,才会重新编译。每次编译,SCons都会把md5存起来,再次执行时,如果md5没变,则不需要rebuild。

如果我们不希望使用md5,而是使用文件修改时间呢?很简单,增加Decider('timestamp-newer') (默认情况下为md5)。也可以使用'MD5-timestamp,则他们一起变了才会rebuild。

我们前面也说到,Decider是一个方法,那很显然,我们也可以自己写个decider方法,详细的可以看scons-user.pdf 6.1.5,这里不细写了。。

env

env分为三种

env1 = Environment(CXX = 'gcc') # 创建一个env
print env1["CXX"] # 获取参数
env2 = env1.Clone(CXX = 'g++')    # 复制一个env
env1.Replace(CXX = 'g++') # 修改参数
env1["CXX"] = "clang++"   #再修改参数
env1.MergeFlags("-g") #增加一个flag
env = Environment()
print env["ENV"]

env2 = Environment(ENV=os.environ)
env3 = Environment(ENV = {"PATH" : os.environ["PATH"]})

命令行输入的参数

比如我们想通过一个debug字段来控制是否开启debug模式,怎么做呢?可以通过ARGUMENTS

env = Environment()
debug = ARGUMENTS.get("debug", 0)
if int(debug):
    print "in debug mode"

scons debug=1就可以了。

小结

上面只是我在看的时候做的一个小结,详细的可以看(文档)[https://scons.org/doc/production/PDF/scons-user.pdf],很多东西都没写,在日常工作中可以一点一点去体会。

 

作者:辰辰沉沉沉
链接:https://www.jianshu.com/p/e4bd3ab9e5d6

标签:入门,编译,CXX,env1,scons,env,debug
来源: https://blog.csdn.net/danshiming/article/details/122774206