项目场景:
项目场景:最近需要在编译一个代码的时候,在配置页面去做一个配置,比如我的MQTT代码可以对接几个物联网平台,但是我实际上只需要对接一个平台。这个时候,我就需要在配置页面选定我要对接哪个平台。
问题描述
如何在make menuconfig配置页面中添加编译项,以及如何通过编译项,来引导代码编译一部分功能而不是全部?
解决方案:
修改软件包的makefile 和代码宏定义
#上层界面
define Package/$(PKG_NAME)
CATEGORY:=XND modules
SUBMENU:=MQTT LINK modules
TITLE:=$(PKG_NAME) module
DEPENDS:=+libc +libuci +libdebug +libubox +ubus +libjson-c +libc +libmosquitto
endef
#帮助我们可以在配置页面出现ThingsBoard 和 Jetlink两个选项
define Package/$(PKG_NAME)/config
menu "Select MQTT Link options"
config ThingsBoard
bool "ThingsBoard support"
default n
help
ThingsBoard MQTT support.
config Jetlink
bool "Jetlink support"
default y
help
Jetlink MQTT support.
config Normal
bool "Normal support"
default n
help
Normal MQTT support.
endmenu
endef
#这个帮助我们在编译的时候加上CONFIG_Jetlink 或者CONFIG_ThingsBoard宏定义
ifdef CONFIG_Jetlink
CFLAGS+=-DCONFIG_Jetlink
endif
ifdef CONFIG_ThingsBoard
CFLAGS+=-DCONFIG_ThingsBoard
endif
代码修改
//代码中设置宏定义即可完成对接不同的平台的配置
#ifdef CONFIG_Jetlink
rc = Jetlink_connect(&rtu_net);
if (rc < 0)
{
goto error;
}
#elif CONFIG_ThingsBoard
rc = ThingsBoard_connect(&rtu_net);
if (rc < 0)
{
goto error;
}
#endif
效果展示
总结
欢迎提问,有问必答。