openwrt sdk 添加软件包 Makefile 写法
参考 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 写法的更多相关文章
- openwrt sdk 编译工具 及 hello world
需要先在 make menuconfig 中打开 sdk make -j4在 bin\targets\ramips\mt7620生成一个openwrt-sdk-ramips-mt7620_gcc-7. ...
- theos的makefile写法
theos的makefile写法与其他linux/unix环境下的makefile写法大同小异,但是对于makefile不熟悉的在导入一些dylib或者framework的时候就会变得很蛋疼. 对于f ...
- Makefile之写demo时的通用Makefile写法
Makefile之写demo时的通用Makefile写法[日期:2013-05-22] 来源:CSDN 作者:gqb666 [字体:大 中 小] 前面的一篇文章Makefile之大型工程项目子目录M ...
- 大型工程多个目录下的Makefile写法
1.前言 目前从事于linux下程序开发,涉及到多个文件,多个目录,这时候编译文件的任务量比较大,需要写Makefile.关于Makefile的详细内容可以参考网上流传非常广泛的<跟我一起写Ma ...
- Openwrt:添加"自定义软件包.ipk"
我们已经尝试做的一件事情,是让移植软件到OpenWrt的操作变得非常容易.如果打开OpenWrt里的一个软件包的目录(OpenWrt/Package/* 或 OpenWrt/feeds/package ...
- OpenWRT添加模块 Makefile和Config.in
添加模块编译 在网上找了一下,很多关于编译Openwrt系统的资料,不过这些事情芯片厂商提供的开发包都已经办得妥妥了,但是没有找到系统介绍的资料,添加一个包的介绍有不多,其中有两个很有参考价值: ht ...
- openwrt sdk compile
recently ,bought a router : tl-wr741n-v5 hd my aim : let the router dail in neetkeeper environment : ...
- gcc编译, gdb调试, makefile写法
//test.c: #include <stdio.h> int main(void) { printf("hello world!"); return 0; } == ...
- 转来的 cuda makefile 写法学习
原文作者:FreeAquar 原文出处:http://www.cnblogs.com/FreeAquar/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...
随机推荐
- peewee 对 mysql 类型支持问题,并不支持bit
这个问题是当时想当然了 看到python BooleanField(default=False) 便认为 对应 mysql的bit 出现问题 mysql实际字段存储值为0,但 peewee orm 后 ...
- 3dmax2014卸载/安装失败/如何彻底卸载清除干净3dmax2014注册表和文件的方法
3dmax2014提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装3dmax2014失败提示3dmax2014安装未完成,某些产品无法安装,也有时候想重新安装3 ...
- Java IO: 其他字符流(下)
作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackReader,LineNumberReader,St ...
- [LC] 231. Power of Two
Given an integer, write a function to determine if it is a power of two. Example 1: Input: 1 Output: ...
- android greendao的外部封装不太友好。
https://github.com/greenrobot/greenDAO 下载下官网的示例,有完整的封装版本,但自已封装是碰到很多问题. 因greenDao的Master和Session中很多方法 ...
- Ajax如何提交数据到springMVC后台
现在好多web项目实现前段和后端分离,实现前端和后端技术人员,使他们加快开发,减少沟通上的问题,后台只需要提供访问接口,而前天只需要调用提供的接口即可.减少前后端的沟通上的成本 本项目是开发中发现aj ...
- 探索真实事物的虚拟再现——微软亚洲研究院SIGGRAPH Asia 2014精彩入选论文赏析
Asia 2014精彩入选论文赏析" title="探索真实事物的虚拟再现--微软亚洲研究院SIGGRAPH Asia 2014精彩入选论文赏析"> SIGGRAP ...
- HDU-1403-Longest Common Substring(后缀数组的高度数组运用)
这题要求两个串中的最长相同子串的长度.高度数组可以求一个串中的最长相同子串的长度.所以想到把两个串连起来,但是这样又会产生一些新的串(第一个串的结尾和第二个串的开头组成的)于是在两个串中间放一个'\0 ...
- ES6下的Function.bind方法
在JavaScript的使用中,this的指向问题始终是一个难点.不同的调用方式,会使this指向不同的对象.而使用call,apply,bind等方式,可改变this的指向,完成一些令人惊叹的黑魔法 ...
- Luogu_1080_国王游戏
题目描述 恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这n位大臣排成一排,国王站在队伍的最前面.排好队 ...