[背景]

大多数开源的三方库其头文件或多或少都会指定<>的形式进行引入,它们的C++工程开发方式就是让你要附加包含它的根目录。

[这里我们拿openssl来举例]

甚至它自己导出提供的头文件里边,它自己都要直接包含这种全局头文件,所以为了不破坏这些约定,且也不需要封装模块的开发者手动去包含它的目录,白易插件这里提供了一种用注释级的指令来自动附加包含这些头文件目录

白易在封装openssl时的模块结构:

其中openssl这个文件夹就是它官方提供的原生存放所有导出符号的头文件声明处。

 

[//#beinclude注释指令]——该指令只能在入口头文件中编写

以下是一个openssl的实际案例:

环境变量路径

备注

$(BEModG)

这个就是对应VS环境中的白易系统全局模块安装目录

$(_BEMod_)

根据白易插件导入的时机,若为用户模块方式导入则表示当前模块所在项目目录内的BEMod文件夹,如果导入的是系统模块则该目录变为$(BEModG)

PS:事实上$(BEModG)这个就是VS环境变量中的配置,在路径中可以用上VS环境各种变量,而不仅限于此,$(_BEMod_)则是白易插件根据条件自己实现的设定。

然后路径最好使用反斜杠,这符合VS配置中的路径规范。

设定好该注释指令后,导入此插件,就能够在当前项目的VS属性页中看到

测试用例放在:BEModExamples\OpenSSL_098k\demo

注:该指令暂不支持内嵌子模块(可能以后也不会),也就是一个模块工程要引入一个子模块(其当中有使用//#beinclude)那么该附加包含会在二级那边失效!所以该方案会适用于一级用户模块或是系统模块,假如内嵌的二级用户模块也支持的话那么导致各种莫名其妙的路径就会被附加包含进来进而更可能导致全局包含文件的冲突。。

 

[//#beExcludeNamespaceSymbol注释指令]——该指令只能在入口头文件中编写

基本格式://#beExcludeNamespaceSymbol( Symbol [, ..] )

这个指令是为了解决嵌套用户子模块的引入(仅限lib库)使其指定的符号不进行命名空间的改编

注:白易0.6之后已经做了【模块内完整扫描解析所有符号】,对导入的子模块【但凡不在自身模块内的符号均视为全局引用符号】则可以进行智能排除(有给到后期窗口编辑的提示),现在通常也不再需要//#beExcludeNamespaceSymbol这条注释指令单独进行全局类或结构体符号的排除。

 

 


[补充:原生库模块封装建议]

在起白易模块工程的时候,默认会生成这两个VS配置文件

对于原生库源码(从官方渠道得到相关原始库的源码分发)而后引进我们的VS进行编译的,由于白易在配置中引进了MakeBEC.exe的自动化根据C/C++源文件定义生成头文件,但对于官方库来说往往已经提供了.h头文件,而白易对于大型复杂的C/C++源文件的生成也不一定可靠,所以务必对其进行源文件解析的排除(这样通过MakeBEC.exe就不必产生从源文件解析导出非原生的头文件了)

当然如果你要进行二次封装的(即自己再单独引出cpp去做依赖调用的封装),
则把那些源文件/头文件都加在统一的文件夹中(可以自定义,当然建议放入BEMod文件夹中 这样可以不必手动给出过滤参数,默认MakeBEC.exe会忽略该文件夹):

如果没有放入BEMod中,如果是自定义文件夹而后需要给出参数 -excludesrc=native/*

另外:自己二次分发的封装模块其@version可以自行定义维护,不必遵循原生库的对应版本号(但可在备注中说明,本库封装自XXX版本)

然后解释一下所谓的二次封装,就是根据自己的喜好再进行单独的引出中文接口、引入内置字节集交互等等...
那么这里建议命名规则是自行加入前缀自己的封装前缀

 

如果你不再进行二次封装(无再次有任何包装层代码),建议在发布的【模块命名】上应采用尾部"_native"的名称标注(这表明该模块本身来自原汁原味,用法也是原汁原味——并且可能不一定完全include所有的头文件,根据需要按需引入)