<白易模块bec格式>

[概述]

白易模块(.bec)本质是一个zip打包格式,也就是只要按照白易规范的文件组织结构,即可自行制作.bec模块(这里的c缩写可以是Compilation(编译后的产物) 也可以是 Collection(源代码的集合))

 

[模块识别的唯一入口]

首先白易用zip包中第一个首目录作为$模块名的识别(所以这就要求你对目录的取名必须是C/C++语言级所规定的符号[英文字母,数字,下划线],当然唯一例外的是可以支持中文符号,当然如果你想只写英文作为模块名白易这边也做了主标题和副标题的兼容详情:模块入口头文件的文档注释.mht),
而后用$模块名/$模块名+".h"作为模块的唯一头文件入口

$模块名+".cpp"这个本身不作要求(可有可无),只属于白易模块工程默认给出的源文件,不过它会与白易MakeBEC.exe工具有些许联动(以及stdafx.h,当然这个联动也不是必需的,后面讲该MakeBEC工具时会提到)

入口头文件的作用在于:
用户导入了白易模块后通过BEMod.h自动生成该#include该模块它的唯一引入代码,所以通过该入口头文件把各个模块中所需的C++符号进行声明引出(当然该头文件期间还可以再#include其他子.h文件 或是 声明+定义的.hpp文件)

 

[白易的两大类模块打包方式]

  1. 以源码形式发布


    当中#srclist.txt的内容


    这个列表文件极其简单,用于记载哪些需引入编译单元的源文件(支持"/"带子目录,每个源文件以换行作为分隔,
    注意由于VS默认筛选器的设定故内部白易实际支持的源文件后缀仅支持识别为".cpp .c .ixx .cppm"这四种)
    尽管以源码发布的白易模块本身对于其他打包中的内容并不做过多要求,
    但后续会提其尽量发布".cpp"的C++源代码 而非".c"

    有个很重要的原因就是当[模块嵌套用户子模块]时白易需要采用Microsoft C++命名空间方式进行自动化符号改编 从而得以来在白易模块工程中安全导入该用户的子模块而不产生符号冲突问题;对于这部分技术内容并不支持纯C语言,如果你的模块只打算安装为系统模块且也不提供对模块工程内再进行用户子模块嵌套的兼容~那么使用".c"的后缀也是可以的。
    等后面章节讲到白易模块开发规范时还会详细展开来说...
  2. 以lib静态库发布


    虽然你看表面是只有2种lib配置,实际上以静态库发布总共有8种形式
    白易插件中有快捷菜单可一键生成多版本lib静态库


    生成原理说明:开发者只需给出四个基础版本(Debug_lib/Rlease_lib、x64Debug_lib/x64Rlease_lib)的配置后,白易插件可根据这四个基础版本内部临时生成总共8种lib编译方式在内的临时配置来进行自动式项目生成。

    下面展示完整版lib的目录结构(可只允许部分版本):




    在用户端导入该完整版模块后(当中的相关宏命令可参考:VC中_DLL,_LIB等预定义的宏.mht):



    注:白易模块的初始化VS项目配置中,默认对release版从VS配置去除了pdb的生成,如有需要可再自行在Release_lib中单独配置允许pdb调试信息文件的生成,如要生成 且你也不想发布Debug版的情况下那么建议避免把它打包进只含Release发布的bec模块中(原因你懂的,当然如果你都想提供Debug版了若还想继续提供release版原则上是应当继续提供released-pdb的)

    PS:这里边的lib文件名本身除了"_static"命名外其余的不作要求(该static表示的只是声明引入的CRT为静态版,否则为引入声明CRT为动态版,更详细的技术说明在模块ABI兼容问题讨论.mht);

    只要目录对了即可,而lib文件名是不是带d的无所谓,白易也并没有用任何清单文件来作标识,默认统一你对这些规范的目录名下引入(以及是否尾部含"_static"标识),如下面这个模块