参考 https://openwrt.org/start?id=docs/guide-developer/packages ,英文稍好点的自己看吧,我写出来也就是方便,英文不好的人看。

软件包的来源,有几种来源。git , sourceforge.net , 或是某软件自己的网站下载。 也支持 svn 什么的,不常用的就不介绍了

1, git 下载

PKG_NAME:=dkjson
PKG_VERSION:=2.5
PKG_RELEASE:= PKG_SOURCE_URL:=https://github.com/LuaDist/dkjson.git
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=e72ba0c9f5d8b8746fc306f6189a819dbb5cd0be

首选是 git 地址 https://github.com/LuaDist/dkjson.git 然后是版本号 e72ba0c9f5d8b8746fc306f6189a819dbb5cd0be

大家都知道git 提交以后,会生成这个吧。 git log 可以查看到。

2, http https 下载

PKG_NAME:=mpg123
PKG_VERSION:=1.25.
PKG_RELEASE:= PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=@SF/mpg123
PKG_HASH:=6c1337aee2e4bf993299851c70b7db11faec785303cfca3a5c3eb5f329ba7023

表示从 SF 也就是 https://sourceforge.net/ 上面下载,把版本号拼上来下载地址就是

https://downloads.sourceforge.net/mpg123/mpg123-1.25.10.tar.bz2

PKG_NAME:=mpd
PKG_VERSION:=0.20.
PKG_RELEASE:= PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://www.musicpd.org/download/mpd/0.20/
PKG_HASH:=a9e458c6e07cdf62649de7722e1e5a7f13aa82eeb397bfbbebc07cf5cf273584

没有放到 sf.net 的 从自己的网站下载

PKG_HASH 是 sha256

3, 配置说明信息

define Package/libev
SECTION:=libs
CATEGORY:=Libraries
TITLE:=High-performance event loop
URL:=http://software.schmorp.de/pkg/libev.html
DEPENDS:=+zlib +libpthread
endef

在 make menuconfig 哪个选择项目里面出现,以及说明信息。

4, configure 编译附加指令

CONFIGURE_ARGS += \
--enable-shared \
--enable-static \

编译出来 动态库, 静态库。

功能介绍

表示在哪个选项包里面
define Package/cJSON

描述
define Package/cJSON/description

编译配置
define Build/Configure

编译前
define Build/Prepare

编译
define Build/Compile

安装
define Package/cJSON/install

安装到 dev 一般是头文件和 静态库 动态库
define Build/InstallDev

有几个不是必须的,如果 不写就是用默认的

例:添加一个 cJSON 包

#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
# https://github.com/DaveGamble/cJSON.git
#
include $(TOPDIR)/rules.mk PKG_NAME:=cJSON #包名
PKG_VERSION:=1.7.7 #版本
PKG_RELEASE:=
PKG_MAINTAINER:=DaveGamble #作者 PKG_SOURCE_PROTO:=git #git
PKG_SOURCE_URL:=https://github.com/DaveGamble/cJSON.git #git 地址
PKG_MIRROR_HASH:=9fe484dd954f6c573fee367ecea5aadfb743bee0a9d6aa917c29528b73fa5fa3 #自动生成的不用管
PKG_SOURCE_VERSION:=787d651e8131c6394c6ff844f108e1a53012949f #git 提交记录
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz #在 dl 中保存的文件名
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) PKG_LICENSE:=MIT #许可证
PKG_LICENSE_FILES:=LICENSE #许可证文件 include $(INCLUDE_DIR)/package.mk define Package/cJSON
SECTION:=net
CATEGORY:=Network
TITLE:=cJSON
URL:=https://github.com/DaveGamble endef define Package/cJSON/description
Ultralightweight JSON parser in ANSI C.
endef define Build/InstallDev #安装头文件 静态库 动态库什么的
$(INSTALL_DIR) $()/usr/include
$(CP) $(PKG_BUILD_DIR)/cJSON.h $()/usr/include/
$(INSTALL_DIR) $()/usr/lib
$(CP) $(PKG_BUILD_DIR)/libcjson.{a,so*} $()/usr/lib/
endef define Package/cJSON/install #安装到 固件中的 动态库 可执行程序
$(INSTALL_DIR) $()/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/cJSON_test $()/usr/bin
$(INSTALL_DIR) $()/usr/lib
$(CP) $(PKG_BUILD_DIR)/libcjson.so.* $()/usr/lib/
$(CP) $(PKG_BUILD_DIR)/libcjson_utils.so.* $()/usr/lib/
endef $(eval $(call BuildPackage,cJSON))

另外一个 cmake 版

#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
# https://github.com/DaveGamble/cJSON.git
#
include $(TOPDIR)/rules.mk PKG_NAME:=cJSON
PKG_VERSION:=1.7.
PKG_RELEASE:=
PKG_MAINTAINER:=DaveGamble PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/DaveGamble/cJSON.git
PKG_MIRROR_HASH:=9fe484dd954f6c573fee367ecea5aadfb743bee0a9d6aa917c29528b73fa5fa3
PKG_SOURCE_VERSION:=787d651e8131c6394c6ff844f108e1a53012949f
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=LICENSE include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/cmake.mk #添加 cmake define Package/cJSON
SECTION:=net
CATEGORY:=Network
TITLE:=cJSON
URL:=https://github.com/DaveGamble
endef define Package/cJSON/description
Ultralightweight JSON parser in ANSI C.
endef

#cmake 参数
CMAKE_OPTIONS += -DENABLE_CJSON_UTILS=On \
-DENABLE_CJSON_TEST=On \
-DBUILD_SHARED_AND_STATIC_LIBS=On\
-DCMAKE_INSTALL_PREFIX=/usr define Build/InstallDev
$(INSTALL_DIR) $()/usr/include
$(CP) $(PKG_INSTALL_DIR)/usr/include/cjson $()/usr/include/
$(INSTALL_DIR) $()/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libcjson.{a,so*} $()/usr/lib/
endef define Package/cJSON/install
$(INSTALL_DIR) $()/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/cJSON_test $()/usr/bin
$(INSTALL_DIR) $()/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libcjson.so.* $()/usr/lib/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libcjson_utils.so.* $()/usr/lib/
endef $(eval $(call BuildPackage,cJSON))

cmake 的编译还是比较简单的。

写了一个 测试 cjson 的小程序

 #include <stdio.h>
#include <cjson/cJSON.h> int main(int argc, char **argv)
{
cJSON *root; root = cJSON_CreateObject();
cJSON_AddStringToObject(root, "VER", "1.0");
cJSON_AddStringToObject(root, "IP", "127.0.0.1");
cJSON_AddStringToObject(root, "DATE", ""); printf("cjson: %s", cJSON_PrintUnformatted(root));
cJSON_Delete(root);
return ;
}

Makefile 工程

include $(TOPDIR)/rules.mk

# Name, version and release number
# The name and version of your package are used to define the variable to point to the build directory of your package: $(PKG_BUILD_DIR)
PKG_NAME:=cjson_hello
PKG_VERSION:=1.0
PKG_RELEASE:= include $(INCLUDE_DIR)/package.mk # Package definition; instructs on how and where our package will appear in the overall configuration menu ('make menuconfig')
define Package/cjson_hello
SECTION:=examples
CATEGORY:=Examples
TITLE:=cjson_hello, World!
DEPENDS:=+cJSON
endef # Package description; a more verbose description on what our package does
define Package/cjson_hello/description
A simple "Hello, world!" -application.
endef define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
cp ./src/* $(PKG_BUILD_DIR)
$(Build/Patch)
endef define Package/cjson_hello/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/cjson_hello $(1)/usr/bin
endef $(eval $(call BuildPackage,cjson_hello))

只需要添加这行 引用 库 就可以了 DEPENDS:=+cJSON , openwrt 真的是太方便了,这点比 yocto 易用。

看测试截图

openwrt sdk 添加软件包 Makefile 写法的更多相关文章

  1. openwrt sdk 编译工具 及 hello world

    需要先在 make menuconfig 中打开 sdk make -j4在 bin\targets\ramips\mt7620生成一个openwrt-sdk-ramips-mt7620_gcc-7. ...

  2. theos的makefile写法

    theos的makefile写法与其他linux/unix环境下的makefile写法大同小异,但是对于makefile不熟悉的在导入一些dylib或者framework的时候就会变得很蛋疼. 对于f ...

  3. Makefile之写demo时的通用Makefile写法

    Makefile之写demo时的通用Makefile写法[日期:2013-05-22] 来源:CSDN  作者:gqb666 [字体:大 中 小] 前面的一篇文章Makefile之大型工程项目子目录M ...

  4. 大型工程多个目录下的Makefile写法

    1.前言 目前从事于linux下程序开发,涉及到多个文件,多个目录,这时候编译文件的任务量比较大,需要写Makefile.关于Makefile的详细内容可以参考网上流传非常广泛的<跟我一起写Ma ...

  5. Openwrt:添加"自定义软件包.ipk"

    我们已经尝试做的一件事情,是让移植软件到OpenWrt的操作变得非常容易.如果打开OpenWrt里的一个软件包的目录(OpenWrt/Package/* 或 OpenWrt/feeds/package ...

  6. OpenWRT添加模块 Makefile和Config.in

    添加模块编译 在网上找了一下,很多关于编译Openwrt系统的资料,不过这些事情芯片厂商提供的开发包都已经办得妥妥了,但是没有找到系统介绍的资料,添加一个包的介绍有不多,其中有两个很有参考价值: ht ...

  7. openwrt sdk compile

    recently ,bought a router : tl-wr741n-v5 hd my aim : let the router dail in neetkeeper environment : ...

  8. gcc编译, gdb调试, makefile写法

    //test.c: #include <stdio.h> int main(void) { printf("hello world!"); return 0; } == ...

  9. 转来的 cuda makefile 写法学习

    原文作者:FreeAquar 原文出处:http://www.cnblogs.com/FreeAquar/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...

随机推荐

  1. Cocos2dx-JS学习01

    123456 <body><script src="res/loading.js"></script><canvas id="g ...

  2. BadRequestException

    package me.zhengjie.common.exception; import lombok.Getter; import org.springframework.http.HttpStat ...

  3. 堆优DIJ模板

    Dij:贪心思想的单源最短路,时间复杂度O(n^2). Dij算法流程: d数组记录源点s到每个点的距离,若无边则设为inf,标记源点: 选出d数组中未标记的最小值,该节点记为k,并标记k为已求出最短 ...

  4. HttpClient系统日志配置

    详细介绍在:http://hc.apache.org/httpclient-3.x/logging.html 一般使用context logging基本够用,context logging解释原文如下 ...

  5. MOOC(7)- case依赖、读取json配置文件进行多个接口请求-测试类中调用封装的mock(10)

    封装mock后,在单元测试中调用 # -*- coding: utf-8 -*- # @Time : 2020/2/11 8:35 # @File : test_class_10.py.py # @A ...

  6. windows 不能在本地计算机启动apache2。有关更多信息,查阅系统事件日志。如果这是非Microsoft服务,请与服务厂商联系,并参考特定服务错误代码1

    今天使用apache的时候又无法启动了,之前也遇到过,这次重点说这一次的情况,其他情况可以查看博主apache相关的其他博文:网上关于apache服务端的设置的很多,但是都不适合我的情况: 一般使用a ...

  7. Jmeter之CSV文件读取

    注意execl表生成的CSV文件的文件编码是GB2312和分隔符就好了

  8. Caused by: com.alibaba.fastjson.JSONException: syntax error, expect {, actual [, pos 0, fastjson-version 1.2

    环境: vue.js 问题: 当添加评论时 重新查询数据刷新数据控制台异常Caused by: com.alibaba.fastjson.JSONException: syntax error, ex ...

  9. 吴裕雄--天生自然 R语言开发学习:方差分析(续二)

    #-------------------------------------------------------------------# # R in Action (2nd ed): Chapte ...

  10. MyBatis连接MySQL8配置

    <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</a ...