版本:V1.0.1
最后更新日期:2021年1月14日19点07分
rvc_dev_target_install
语句调用
RVC_INTEGRATE_BUILD
判断
RVC_INTEGRATE_BUILD
用于判断是否处于我行集成编译环境,厂商在编写 CMakeLists.txt 文件时,对于一些输出逻辑的声明等,可以通过 if(NOT RVC_INTEGRATE_BUILD)
来添加自己的逻辑我行的源码管理工具不允许上传二进制库文件(主要是.so库),为更好的管理厂商提供的库文件,行内在编译之前会将厂商提供的几个文件夹:
剪切到其他地方进行管理,其他适配器工程文件夹和 deps 文件夹保持不变
所以厂商在编码引用上诉这些文件目录的路径时,务必请使用我们提供的宏,而不要使用相对路径,见路径引用请使用我们提供的宏,不要用.
开头的相对路径,更不要使用绝对路径
不允许使用:
include_directories
link_directories
因为这种声明是全局生效的,会影响到其他工程目标的编译,请改用:
target_include_directories
target_link_directories
这种声明的作用范围是针对工程目标的
已声明在我行定义的rvc_dev_config_library
CMake宏里,已经对当前工程目标引入了如下路径:
头文件目录
DevAdapter/include
DevAdapter/{厂商文件夹}/include
链接库目录
DevAdapter/lib/gcc_aarch64
DevAdapter/{厂商文件夹}/lib/gcc_aarch64
..
开头的相对路径,更不要使用绝对路径行内提供的宏定义如下:
/DevAdapter/include
rvc_dev_config_library
引入,无需再单独引入/DevAdapter/assets
/DevAdapter/lib/gcc_aarch64
,里头的非.lib内容安装时会拷贝到我行应用程序运行目录的dep文件夹下/DevAdapter/bin/gcc_aarch64
,里头内容安装时会拷贝到我行应用程序运行目录的dep文件夹下target_link_libraries
中使用/DevAdapter/{当前厂商目录}/deps
/DevAdapter/{当前厂商目录}/include
rvc_dev_config_library
引入,无需再单独引入/DevAdapter/{当前厂商目录}/assets
/DevAdapter/{当前厂商目录}/lib/gcc_aarch64
rvc_dev_config_library
引入,里头的非.lib内容安装时会拷贝到我行应用程序运行目录的dep文件夹下/DevAdapter/{当前厂商目录}/bin/gcc_aarch64
厂商名称:厂商名称一旦确定,就不可更改
rvc_dev_define_module("{此处填写的适配器名称需注意}")
set(${MODULE_PREFIX}_VENDOR "{当前厂商名称}")
厂商 | 简称 |
---|---|
科堡 | keba |
南天 | nantian |
广电 | grg |
恒银 | cw |
长城 | gwi |
厂商文件夹名称、适配器的Vendor
字段请与如上表格保持一致。
下方是在某个适配器工程的CMakeLists.txt文件的一部分内容:问题详见注释处
set(INCLUDE_PINPAD ../../include
../include
../include/SDK
)
#1. ../../include:引用的我行头文件,已在rvc_dev_config_library引入,没必要
#2. ../include:引用当前厂商的头文件,(新增)已在rvc_dev_config_library引入,可废弃
#3. ../include/SDK:引用当前厂商的头文件的子目录,不能已.开头,务必使用:${VENDOR_CURRENT_INCLUDE_DIR}/SDK
set(${MODULE_PREFIX}_SRCS SHARED
${SRC_LIST}
)
include_directories(${INCLUDE_PINPAD})
#1.不能使用 include_directories,改用target_include_directories(${MODULE_FULL_NAME} ${INCLUDE_PINPAD}),当然,得在rvc_dev_config_library调用之后
link_directories(${DEVADAPTER_CURRENT_LIB_DIR})
link_directories(${VENDOR_CURRENT_LIB_DIR})
# 1. 两条路径均已在rvc_dev_config_library引入,没必要再单独引入
# 2. 不能使用 link_directories,改用 target_link_directories
其他注意事项请看模板内相关 CMakeLists.txt 的注释内容和编码规范文档
上面提到,在招行的编译环境中,会把厂商的头文件目录(如:DevAdapter/cmbsz/include)放置在其他独立开来,所以在编码时不要使用相对路径!!。我行提供的CMake宏rvc_dev_config_library
已经将DevAdapter/include
和DevAdapter/{当前厂商名称}/include
加入到头文件的搜索路径中,所以在编码时,只要所需引用的头文件在这两个文件夹中,无需再单独加相对路径,直接引用头文件名称即可,否则有可能会出现找不到头文件或找错头文件而出现报错的风险。
例如,在某个厂商适配器实现中
#include "../include/DRV_IDCardReader.h"
#include "../../include/IDCerClass.h"
#include "../include/CILIX_AUX_UTILS.h"
#include "../include/log4vendor.h"
需要改成:
#include "DRV_IDCardReader.h"
#include "IDCerClass.h"
#include "CILIX_AUX_UTILS.h"
#include "log4vendor.h"
我行提供的库文件,一般都会放置在DevAdapter/include目录中,包括适配器头文件、日志库头文件等,不要将这些头文件拷贝到厂商目录(如:DevAdapter/cmbsz)下的任意目录中然后再加以引用,避免后续我行在更新公共文件时出现引用错误导致编译报错。
仅需提供厂商文件夹,无需提供整个DevAdapter文件夹
提供的厂商文件夹以厂商名称命名,而不是我行提供的Demo名称”cmbsz"!!
提供的内容注意去掉无关文件:生成的日志文件、CMake构建残留文件、有源码的适配器库生成文件或依赖库文件、我行提供的Demo(空文件夹也不允许,没用就删掉)
建议:厂商文件夹首层目录提供CHANGELOG文件,该文件需要记录几个重要元素:版本变更记录,提交日期,版本号等。并合适地将对应的版本号同步填充到适配器接口GetDevCategory返回的相关字段中。