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/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...
随机推荐
- 83)PHP,配置文件功能
首选配置文件应该在 我们的应用application目录中,这样针对每一应用,都有自己的配置文件. 我觉得配置文件的名字很有意思,首先是 名字.config.php 格式就是 return arr ...
- spring mvc 设置@Scope("prototype")
spring中bean的scope属性,有如下5种类型: singleton 表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例 prototype表示每次获得be ...
- HttpClient简介与案例分析
HttpClient简介 HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 JDK 的 jav ...
- python中的reduce函数
python中的reduce python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是 ...
- 数据库三大范式和反范式 · oldmee
后一个范式都是在满足前一个范式的基础上建立的. 1NF 无重复的列.表中的每一列都是不可分割的基本数据项.不满足1NF的数据库不是关系数据库.如联系人表(姓名,电话),一个联系人有家庭电话和公司电话, ...
- Ionic3学习笔记(十四)使用 videogular2 实现视频播放以及遇到的一些问题
本文为原创文章,转载请标明出处 目录 使用 videogular2 安装 增加图标.字体支持 导入 module 举个例子 遇到的问题 iOS 端自动进入全屏播放 Android 端 autoplay ...
- fiddler https 您的连接不是私密连接 解决方法(不明原理但是照着做成功了,记录下)
在桌面找到生成的证书 打开chrome chrome://settings/ 导入证书 再次运行fiddler,依次点击Tools下的Options,然后点HTTPS选项卡,再点击actions下的R ...
- unittest(20)- 自动更新表格中的测试数据(1)
# 直接给出第一个手机号,而不是从excel中取数据 from openpyxl import load_workbook from tools.read_config import ReadConf ...
- Image图片
# View more python tutorials on my Youtube and Youku channel!!! # Youtube video tutorial: https://ww ...
- 软工 实验一 Git代码版本管理
实验目的: 1)了解分布式版本控制系统的核心机理: 2) 熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git init git status指令 3 ...