在 ns3 的编译体系中,每个 module 会包含一个名为 wscript 的 python 脚本来提供编译信息。例如,一个通过create-module.py
创建的 module 中的 wscript 为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 def build (bld ): module = bld.create_ns3_module('example-module' , ['core' ]) module.source = [ 'model/example-module.cc' , 'helper/example-module-helper.cc' , ] module_test = bld.create_ns3_module_test_library('example-module' ) module_test.source = [ 'test/example-module-test-suite.cc' , ] headers = bld(features='ns3header' ) headers.module = 'example-module' headers.source = [ 'model/example-module.h' , 'helper/example-module-helper.h' , ] if bld.env.ENABLE_EXAMPLES: bld.recurse('examples' )
其中,module.source
中包含需要编译的.cc
源文件,而headers.source
中包含对应的头文件。每次新建 C++源代码文件时,都需要手动添加到这里的列表中。下面我给出一个自动从module
的model
, helper
目录下搜索源文件的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 import osdef _list_sources (bld, suffix ): root_dir = bld.path.abspath() res = [ x for x in [os.path.join("model" , y) for y in os.listdir(os.path.join(root_dir, "model" ))] if x.endswith(suffix) ] res += [ x for x in [os.path.join("helper" , y) for y in os.listdir(os.path.join(root_dir, "helper" ))] if x.endswith(suffix) ] return res def build (bld ): module = bld.create_ns3_module('example-module' , ["core" ]) module.source = _list_sources(bld, ".cc" ) module_test = bld.create_ns3_module_test_library('example-module' ) module_test.source = [ 'test/mix-autonomy-test-suite.cc' , ] headers = bld(features='ns3header' ) headers.module = 'example-module' headers.source = _list_sources(bld, ".h" ) if bld.env.ENABLE_EXAMPLES: bld.recurse('examples' )
注意不要直接套用上面的范例文件,需要将"example-module"的名字改为你的 module 的名字