N2的build system

N2的编译系统核心主要是由三部分组成: 

模块: 有一组源文件和头文件构成,这组文件包含从nRoot继承过来的代码,以及任意的代码.

目标: 执行文件,比如.exe,静态库,比如,.lib,动态库,比如,.dll

工作区: 由一起编译过的目标组成的集合.

其中每个模块都只对应于一个nRoot继承的文件.因此不能将多个源文件在任意 一个模块中对应于一个NebulaClass或NebulaScriptClass.

编译系统按照以下的目录来查找bld files:

    $home/code/nebula2/bldfiles and its subdirectories
    $home/code/XXX/bldfiles
    $home/code/contrib/XXX/bldfiles

$home:就是主目录了,bldfiles会在这里被搜索到,并且按照一定的规格生成相应的工程文件,这里的bldfiles就相当于配置文件.

并且我们用update.py在 $home/build/[compiler]生成工作区,解决方案等,

模块是一些相关文件的集合,经常是单个类的头文件和源文件,在工程中需要的文件都可以列在这里.

比如:

beginmodule nmyclass1
    setdir wheretofindthefollowing
    setfiles { nmyclass1_main }
    setheaders { nmyclass1 }
endmodule

上面是设置源文件和头文件所在的目录以及源文件名和头文件名.

一般地,我们在建模块的时候,都要用beginmodule和endmodule对应起来.

setdir设置的路径是这样的:相当于home/code/XXX/src----inc,或者是home/code/contrib/XXX/src以及对应的inc,这里的目录主要是贡献的目录,其它程序员提供的模块.

接着,我们可以将这个module放置到一个新的目标里面去.

begintarget mylibrary
    settype lib
    setmodules { nmyclass1 nmyclass2 }
endtarget

很 显然,这个目标是想将原来的模块组成一个lib库.这里的话,settype还可以改成dll或者exe.他们将分别生成lib,dll,exe.

接着我们就可以定义一个更加大的了.---workspace.

beginworkspace myProjectWorkspace
    setbinarydir ./bin/
    settargets {
        mylibrary
        nkernel
        nnebula
    }
endworkspace

在这targets里面就有我们在之前定义的东西,mylibrary,可以看出,这种结果是由上'而下来的,由小变大.

setbinarydir的目录是相对于home而来的,settargets 是设置一些在工作区或者解决方案中出现的目标.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值