参考 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. <USACO09DEC>视频游戏的麻烦Video Game Troublesの思路

    emm今天模拟赛的题.神奇地A了 #include<cstdio> #include<cstring> #include<iostream> #include< ...

  2. [LC] 105. Construct Binary Tree from Preorder and Inorder Traversal

    Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that ...

  3. RS232串口通信详解

    串口是计算机上一种非常通用的设备通信协议. ---------------------------------串口的引脚定义: 9芯 信号方向来自 缩写 描述 1 调制解调器 CD 载波检测 2 调制 ...

  4. HDU-6707-Shuffle Card(很数据结构的一道题)

    题目传送门 sol1:拿到这题的时候刚上完课,讲的是指针.所以一下子就联想到了双向链表.链表可以解决卡片移动的问题,但是无法快速定位要移动的卡片,所以再开一个指针数组,结合数组下标访问的特性快速定位到 ...

  5. python的列表list和集合set操作

    以下是一些python的list和set的基本操作 1.list的一些操作 list = [1, 2, 3] list.append(5) print(list) list.extend([7, 8] ...

  6. 对Java tutorial-examples中hello2核心代码分析

    1.在hello2中有两个.java源文件分别是GreetingServlet.Java和ResponseServlet.jva文件主要对以下核心代码做主要分析. String username = ...

  7. Chrome 调试 react-native 通过Network面板查看网络请求

    参考 https://github.com/facebook/react-native/issues/934 三楼 真机或模拟器下 Debug JS Remotely, 会打开chrome,地址为ip ...

  8. java对象POJO和JavaBean的区别

    "Plain Ordinary Java Object",简单普通的java对象.主要用来指代那些没有遵循特定的java对象模型,约定或者框架的对象.POJO的内在含义是指那些:有 ...

  9. “代码量统计脚本”

    概述 本文从一段统计C/C++程序脚本入手,记录shell脚本常用和重要的知识点. 代码量统计程序 文件名称,count_code_line.sh 12345678910111213141516171 ...

  10. Git学习笔记(二) · 非典型性程序猿

    远程库的使用 前面说到的都是git在本地的操作,那么实际协作开发过程中我们肯定是要有一个远程版本库作为项目的核心版本库,也就是投入生产使用的版本.这里我们以 Github为例.Github是一个开放的 ...