06 SCons节点对象

06 节点对象

1.基础语法

  • 所有编译方法返回的是节点对象列表,来表示目标文件将被编译。

  • 返回的节点可以作为其它编译方法的参数。

举个例子来说明,假如有两个要编译的文件,他们的编译参数不一样,但是他们的编译目标文件,需要最终链接在一起编译成可执行程序。

import os.path

#1.编译方法返回目标节点列表

#下面使用跨平台做法,将Object方法返回的节点列表定义为变量传入到Program参数中,这样的好处是我
#不需要知道返回的节点属性是.o还是.obj,这样就可以跨平台使用了
#两次调用Object方法编译不同文件,使用不同的CCFLAGS 
hello_list = Object('hello.c' , CCFLAGS='-DHELLO')
goodbye_list = Object('goodbye.c' , CCFLAGS='-DGOODBYE')
# 将Object返回节点列表作为Program的参数
program_list = Program(hello_list + goodbye_list)

#打印出节点文件的名称,这里返回的是将被编译成的目标文件.o或.obj
print("the hello file is:%s"%hello_list[0])
print("the goodbye file is:%s"%goodbye_list[0])
# 打印可执行程序的名称
print("the program file is:%s "%program_list[0])

#将节点名字转换为String类型,使用python内置方法str()
program_name = str(program_list[0])
#使用python内置方法os.path.exists()判断文件是否存在
if not os.path.exists(program_name):
    print("%s does not exist!"%program_name)

#2.显示的创建文件和文件夹

#使用File方法创建文件,使用Dir方法创建文件夹
hello_c = File('hello.c')
Program(hello_c)
#这种方式和上面方式是等价的,当我们需要显示的指示我们的输入文件类型时,就使用上面方法
Program('hello.c')

#还有一种情况就是输入的文件类型我们不知道是文件还是文件夹,这时使用Entry方法
xyz = Entry('xyz')

#3.从节点或字符串获取编译路径方法GetBuildPath,这里要注意的是编译路径不是绝对路径!

#创建环境env,并设置一个环境变量VAR="value"
env = Environment(VAR="value")
#创建文件,并返回文件节点
n = File("foo.c")

# 获取文件节点编译路径和字符串路径(字符串路径中引用了环境变量VAR)
# 这里传入的参数是有2个参数的列表,所以返回编译路径也是列表长度也是2个元素
# foo.c 和SConstruct文件在同一个目录,编译路径根路径是.,所以foo.c的编译路径就是foo.c
print(env.GetBuildPath([n , "sub/dir/$VAR"]))

# windoes 打印结果:['foo.c', 'sub\\dir\\value']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懂IT的嵌入式工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值