NS3 让你的仿真脚本运行在你想要的位置

NS3 让你的仿真脚本运行在你想要的位置
需求:

仿真脚本一般放在scratch之下,但是随着仿真程序的增多,这个目录会变得越来越臃肿,于是产生建立子目录的想法.那么到底能不能建立子目录呢?在哪建立子目录更加合适呢?

解决方案:

直接看/ns3.20/wscript,这个文件夹我的理解是w:waf, script当然是脚本的意思,就是waf编译器会调用的仿真脚本.其中的一个片段:

def add_scratch_programs(bld):
    all_modules = [mod[len("ns3-"):] for mod in bld.env['NS3_ENABLED_MODULES']]
    for filename in os.listdir("scratch"):
        if filename.startswith('.') or filename == 'CVS':
	    continue
        if os.path.isdir(os.path.join("scratch", filename)):
            obj = bld.create_ns3_program(filename, all_modules)
            obj.path = obj.path.find_dir('scratch').find_dir(filename)
            obj.source = obj.path.ant_glob('*.cc')
            obj.target = filename
            obj.name = obj.target
            obj.install_path = None
        elif filename.endswith(".cc"):
            name = filename[:-len(".cc")]
            obj = bld.create_ns3_program(name, all_modules)
            obj.path = obj.path.find_dir('scratch')
            obj.source = filename
            obj.target = name
            obj.name = obj.target
            obj.install_path = None

程序注释:
不难看出,这个函数的功能是将scratch添加到编译的目录中,首先判断scratch下面的文件是文件夹还是目录,如果是.cc文件的话,就创建这个ns3的程序;如果是文件夹的话,直接以文件夹的名字创建ns3的程序,所以该子目录下的程序的名字应该和子文件夹的名字相同.这里的设计主要是为了将.cc和.h的文件放在一起,减少空间.

显然,如果我有很多.cc仿真脚本的时候,放在这里并不太合适,那么放在哪里呢? 
不错,是examples文件夹.

请看下面一段程序:

def add_examples_programs(bld):
    env = bld.env
    if env['ENABLE_EXAMPLES']:
        for dir in os.listdir('examples'):
            if dir.startswith('.') or dir == 'CVS':
                continue
            if os.path.isdir(os.path.join('examples', dir)):
                bld.recurse(os.path.join('examples', dir))

程序注释:
这个是添加examples文件夹,如果该目录下的文件是文件夹的话,直接跳到该子目录下进行处理.再去它的子目录下看看wscript:

def build(bld):
    obj = bld.create_ns3_program('energy-model-example', ['core', 'mobility', 'wifi', 'energy', 'internet'])
    obj.source = 'energy-model-example.cc'

这里创建ns3的仿真程序.

我们类似创建目录,然后写个wscript就可以了.当然你还可以通过修改wscript,让你的编译更加自由.

附加,我的一次修改仿真脚本的经历:

有次运行程序, 忘记添加scratch目录了,比如直接运行first,但是运行的程序结果并不是我想要的,结果发现运行的是examples下面的子目录下面的.那么waf是怎么选择哪一个同名文件的呢,还是看wscript脚本:

def build(bld):

在上面这个函数中,有这样两句调用:

add_examples_programs(bld)
add_scratch_programs(bld)

发现examples文件夹下面的程序放在前面,试着调换这个顺序,再次运行就优先scratch下面的程序了.

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值