基于linux的嵌入式项目应用工具类库源码分享,常用模块都有

Embedme项目简介

Embedme是一个基于linux的嵌入式应用工具类库,包括线程,线程池,Coroutine,定时器,消息队列,socket,Tuple,文件,目录,内存池,串口,CANSocket等嵌入式开发中常用的模块。Embedme集成了cJSON、sqlite、tinyxml、libconfig++、yaml-cpp、libev等优秀的开源库。它可以帮助您快速的构建稳定的嵌入式应用程序,省得广大码农重复造轮子(当然,上班改造还得造,只不过有了它,您就可以造给老板看了)。

图片[1]-基于linux的嵌入式项目应用工具类库源码分享,常用模块都有-趣考网

编译系统mbuild system

本工程采用自行编写的mbuild系统进行编译,mbuild系统的使用请参考:mbuild编译系统说明。

目录树结构

  • app: 应用程序源代码存放目录.
  • build: mbuild编译系统目录.
  • example: 工程示例源码目录.
  • doc: 用户手册.
  • openlibs: 目录用于放置移植好的外部库.
  • opensource/libemb: libemb库源码,此文件夹内的代码不依赖第三方开源库.
  • opensource/libembx: libembx库源码,此文件夹内的代码会依赖第三方开源库.
  • tools: 嵌入式常用工具.

图片[2]-基于linux的嵌入式项目应用工具类库源码分享,常用模块都有-趣考网

编译说明

在编译前请先确认已安装autoconf、automake、libtool等工具,否则无法编译成功,如遇编译错误,请自行查看错误提示,判断是否是工具未安装。

1 . cd到工程跟目录下

$cd embedme

2 . 设置mbuild编译环境

$source build/envsetup.sh

3 . 设置编译目标体系

$mbuild_setup

4 . 编译

$mbuild_make opensource/libemb libemb$mbuild_make example/libemb.test test$mbuild_make app/demo demo

备注:本工程支持cygwin/Android环境下编译,源码中使用OS_CYGWIN/OS_ANDROID宏来隔离代码,如果不使用宏将默认代码同时支持在Linux、cygwin、Android环境下编译。


图片[3]-基于linux的嵌入式项目应用工具类库源码分享,常用模块都有-趣考网

mbuild编译系统说明

build目录是mbuild编译系统的源码,build/envsetup.sh是编译环境设置脚本。在使用mbuild系统前,必须在工程根目录下执行:

$source ./build/envsetup

执行完成后将可使用mbuild系统提供的系列命令mbuild_xxx。

命令说明

$mbuild_setup #编译环境设置(默认为x86配置,如果需要交叉编译,可以修改profile.sh文件,或选择msetup菜单中的specify by myself选项设置)$mbuild_make    #编译directory目录下的target目标$mbuild_clean   #清理directory目录下的target目标$mbuild_remake    # 重新编译directory目录下的target目标$mbuild_project   [exec|lib|qt|res|fromsrc|fromtar] #在directory目录下创建target目标的子工程$mbuild_auto #自动编译(调用自动编译脚本:autobuild.sh)

使用mbuild命令必须指定两个参数

  • 源码目录
  •    源码目录下的目标名称,用户需编写对应的目标构建文件.mk
  •  指定编译链接库的类型,static或者shared

目标构建文件target.mk说明

mbuild系统支持构建以下几种目标

  • 可执行文件(BUILD_EXECUTABLE)
  • 链接库(BUILD_LIBRARY)
  • QT项目(BUILD_QTPROJECT)
  • 资源文件(BUILD_RESOURCE)
  • 从源码tar包编译(BUILD_FROMTAR)
  • 从源码编译(BUILD_FROMSRC)

注意:每个target.mk文件仅支持编译一个目标,每个目标需对应一个mk文件。

图片[4]-基于linux的嵌入式项目应用工具类库源码分享,常用模块都有-趣考网

target.mk模板1(编译目标)

# this file is generated by mbuild_project from mbuild system, see more in build/README.mdLOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)# module nameLOCAL_MODULE := # c compile flagsLOCAL_CFLAGS :=# cpp compile flagsLOCAL_CXXFLAGS :=# include file listLOCAL_INC_PATHS := \\$(LOCAL_PATH)# source file listLOCAL_SRC_FILES := \\# lib type : static or sharedLOCAL_LIB_TYPE :=LOCAL_PRE_BUILD :=LOCAL_POST_BUILD :=include $(BUILD_LIBRARY)

target.mk模板2(部署文件)

# this file is generated by mbuild_project from mbuild system, see more in build/README.mdLOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)# module nameLOCAL_MODULE := # resource file listLOCAL_RESOURCE_FILES:= # destination pathLOCAL_RESOURCE_DEST :=include $(BUILD_RESOURCE)

常用变量说明

LOCAL_PATH       #当前源码目录,固定写为LOCAL_PATH := $(call my-dir) CLEAR_VARS       #清除编译变量LOCAL_CFLAGS     #编译参数CFLAGSLOCAL_LDFLAGS    #链接参数LDFLAGSLOCAL_INC_PATHS  #头文件搜索路径LOCAL_LIB_PATHS  #链接库搜索路径LOCAL_LIB_TYPE   #目标库的类型:static或者sharedLOCAL_MODULE     #模块名称,最终生成的目标名称LOCAL_PRE_BUILD  #编译前执行的脚本LOCAL_POST_BUILD #编译后执行的脚本GCC #指定c编译器,如果不指定,则由mbuild系统确定编译器CC  #指定c++编译器,如果不指定,则由mbuild系统确定编译器AR  #指定链接器,如果不指定,则由mbuild系统确定链接器

工程样例

假定在工程目录下有hello目录,目录下有源码hello.h,hello.c,main.c。我们的目标是生成一个libhello.a和一个可执行程序hello. 1 . 设置编译环境:

$source ./build/envsetup.sh$mbuild_setup

2 . 在hello目录下新建libhello.a目标的构建文件libhello.mk:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := libhelloLOCAL_CFLAGS :=LOCAL_CXXFLAGS :=LOCAL_LDFLAGS :=LOCAL_LIB_PATHS :=LOCAL_INC_PATHS := $(LOCAL_PATH)LOCAL_SRC_FILES := hello.cLOCAL_LIB_TYPE := staticLOCAL_PRE_BUILD:=LOCAL_POST_BUILD:=include $(BUILD_LIBRARY)

也可以使用mbuild_project命令自动创建mk文件:

mbuild_project hello libhello lib

3 . 在hello目录下新建hello目标的构建文件hello.mk:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := helloLOCAL_CFLAGS :=LOCAL_LDFLAGS := -lpthreadLOCAL_INC_PATHS := $(LOCAL_PATH)LOCAL_SRC_FILES := main.cpp hello.cLOCAL_PRE_BUILD:=LOCAL_POST_BUILD:=include $(BUILD_EXECUTABLE)

也可以使用mbuild_project命令自动创建mk文件:

mbuild_project hello hello exec

4 . 编译目标:

    $mbuild_make hello libhello static    $mbuild_make hello hello

5 . 在output目录的lib和bin文件夹下你将发现编译出的目标文件:

    $ls output-x86_64/bin    hello    $ls output-x86_64/lib    libhello.a

注意事项

作者说的:本软件遵循LGPL协议,请自觉遵守该协议,您使用本软件所引起的任何法律后果本人不承担任何责任! 如果您使用此源码,请务必保留README在您的工程代码目录下!

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享