ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

scons入门(二)

2022-02-03 09:59:04  阅读:203  来源: 互联网

标签:入门 编译 CXX env1 scons env debug


判断是否需要重新编译

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分为三种

  • external enviroment 保存在os.environ 中,和scons其实没太大关系,保存着一些系统定义的环境变量,如PATH之类

  • construction environment

    这个比较重要,我们可能希望不同的源文件使用不同的编译参数,这时候我们就能设置不同的编译环境,指定哪个文件用哪种编译。construction environment 中保存了构建相关的一些参数。

    使用方式如下

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,除了CXX 被修改以外,其他参数均不变。另外,我们也可以像一个dict一样,去获取env中的内容。

  • execution enviroment

    这其实就是construction environment 中的一个变量ENV

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有