OpenWRT package/Makefile

Makefile 的预定义项

Makefile 的预定义
可定义项说明必备
PKG_* 预设变量部分必备
Package/conffiles软件包安装的配置文件全路径,每行一个。
比如:/etc/abc.conf
可选
Package/descriptionPackage/description必备
Build/Prepare 编译前对代码的预处理操作可选
Build/Configureconfigure 步骤,一般默认即可可选
Build/Compile代码编译步骤,一般使用默认即可可选
Build/Install在编译完成后进行安装时的处理,如果不填写则自动执行make install可选
Build/InstallDev需要编译完成后的库或头文件,但是又不在目标设备上使用可选
Build/Clean清理步骤可选
Package/install 软件包安装操作必备
Package/preinst软件包安装之前处理的脚本
必须包含脚本头信息 #!/bin/sh
如果中断安装 , 在脚本中有 return false 即可实现
可选
Package/postinst软件包安装之后处理的脚本
必须包含脚本头信息 #!/bin/sh
可选
Package/prerm软件包卸载之前处理的脚本
必须包含脚本头信息 #!/bin/sh
如果中断卸载 , 在脚本中有 return false 即可实现
可选
Package/postrm软件包卸载之后处理的脚本
必须包含脚本头信息 #!/bin/sh
可选
Package/configConfig.in 定义,如果软件包支持一些CONFIG_* 选项,可以在此定义可选

PKG_* 变量

PKG 变量
变量名说明
PKG_NAME软件包的名称,在菜单选项中将看见,必须与目录名称一致。避免在包名中使用下划线,以避免构建失败
PKG_VERSION软件包版本,如果软件包的源代码是在线下载的,版本号要与服务器上的一致
PKG_RELEASE此包Makefile的版本。最初应设置为1,当 PKG_VERSION发生变化时,应重置为1。当 PKG_VERSION保持不变,但对已安装的工件进行功能更改时,递增它
PKG_BUILD_DIR

软件包的编译过程目录名字。默认值$(PKG_NAME)-$(PKG_VERSION)

一般不用配置

PKG_SOURCE软件包源代码文件的名字
PKG_SOURCE_URL软件包源代码的下载地址,如果不填写就不下载 , 直接从 dl/ 下查找
PKG_MD5SUM对下载下来的软件包的Md5校验值
PKG_HASH对下载下来的软件包的 hash256 校验值
PKG_CAT指定使用哪个解压工具(zcat、bzcat、unzip)
PKG_BUILD_DEPENDS需要在此包之前构建的包。指定目录名即可。语法与 DEPENDS 相同
PKG_CONFIG_DEPENDS指定哪些配置选项会影响构建配置,并应在更改时触发Build/Configure的重新配置
PKG_INSTALL将其设置为“1”将调用包的原始“make install”,前缀设置为 PKG_INSTALL_DIR
PKG_INSTALL_DIR软件的安装目录,默认是$(PKG_BUILD_DIR)/ipkg-install
PKG_SOURCE_PROTO

通过代码仓库获得代码 git、svn bzr  cvs  darcs hg

PKG_SOURCE_VERSIONcommit hash or SVN revision to check out
MAKE_PATHOpenWRT的构建系统将尝在 PKG_BUILD_DIR 中运行make,但是有的包在PKG_BUILD_DIR没有Makefile,可以用此变量来支持执行 make 的目录

Package/ 软件包描述

选项描述必备
SECTION软件包的分类,暂时没有作用
CATEGORY软件包所属的菜单选项中的菜单,值既可以是已经有的分类,也可以是自己的一个新分类。已经有的分类可以参考同类别软件包的 CATEGORY 写法
SUBMENU二级菜单名,会显示在CATEGORY的下一级
TITLE软件包显示的名称
URL软件包来源公司网站
MAINTAINER软件包的维护者信息
DEPENDS编译时依赖。软件包依赖哪些软件包
EXTRA_DEPENDS 运行时依赖
USERID软件包安装的时候生成账号和组。
值格式为:账号 / 组
PKGARCH 将其设置为“all”以生成一个包含“Architecture:all”的包。默认情况下,包是为目标体系结构构建的,生成的ipk文件也是这样标记的。但是如果一个包只包含脚本或资源,用PKGARCH:=all标记它将生成一个可以安装在任何目标体系结构上的ipk文件

 DEPENDS

DEPENDS:=libpcap当 libpcap 被选中时,你的包才能在 menuconfig 中显示并配置
DEPENDS:=+libpcap当你选中你的包时,libpcap 也会被选中
DEPENDS:=@USB_SUPPORT你的包依赖 CONFIG_USB_SUPPORT 选项,只有CONFIG_USB_SUPPORT 选项被选中时你的包才会在 menuconfig 中显示并配置
DEPENDS:=+PACKAGE_arpd:libpcap如果配置了选项CONFIG_PACKAGE_arpd,则当前软件包会依赖 libpcap,当前软件包被选上时,软件包libpcap也将自动被选上
DEPENDS:=+@KERNEL_DEBUG_FS当前软件包被选中时,选项KERNEL_DEBUG_FS也会被选中
DEPENDS:=@PACKAGE_arpd:libpcap如果配置了选项CONFIG_PACKAGE_arpd,则当前软件包会依赖 libpcap。当libpcap未被选中时,当前软件包不可见。

PKG_BUILD_DEPENDS

如果你的包需要宿主工具才能为目标机器构建,这些应该放在 PKG_BUILD_DEPENDS 中,并以 /host 结束。例如, json-glib 包需要Meson构建系统来生成构建文件,以及主机上的Glib2

PKG_BUILD_DEPENDS:=glib2/host meson/host

HOST_BUILD_DEPENDS

包本身可能提供宿主工具,而构建或使用这些工具可能需要先构建其他宿主工具。其他工具则放在 HOST_BUILD_DEPENDS 中。例如,Meson包提供的主机工具需要另一个构建工具Ninja

HOST_BUILD_DEPENDS:=ninja/host

预设变量

CONFIGURE_ARGS

这个变量在执行 ./configure 配置脚本时,用于选择要附加什么参数,格式如下

CONFIGURE_ARGS += \
        --libdir=/usr/lib/lighttpd \
        --sysconfdir=/etc/lighttpd \
        --enable-shared \
        --enable-static \
        --disable-rpath \
        --without-attr \
        --without-bzip2

CONFIGURE_VARS += \
        ac_cv_file__proc_stat=yes \
        ac_cv_file__proc_meminfo=yes \
        ac_cv_func_malloc_0_nonnull=yes \
        ac_cv_func_realloc_0_nonnull=yes

MAKE_FLAGS

这个变量用于定义系统默认执行 make 的时候,附加的参数有哪些,格式如下

MAKE_FLAGS += \
        CFLAGS="$(TARGET_CFLAGS) $(TARGET_CPPFLAGS)" \
        LDFLAGS="$(TARGET_LDFLAGS) $(LIBS)"

Makefile demo

include $(TOPDIR)/rules.mk

PKG_NAME:=helloworld
PKG_VERSION:=1.0
PKG_RELEASE:=1

# PKG_* 变量需要在此之前定义
include $(INCLUDE_DIR)/package.mk

# 软件包定义;说明我们的软件包将如何以及在哪里出现在 make menuconfig 中
define Package/helloworld
  SECTION:=examples
  CATEGORY:=Examples
  TITLE:=Hello, World!
endef

# 包描述;关于我们的包做什么的更详细的描述
define Package/helloworld/description
  A simple "Hello, world!" -application.
endef

# 定义如何安装我们的软件
define Package/helloworld/install
		$(INSTALL_DIR) $(1)/usr/bin
		$(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/usr/bin
endef

# 这个命令总是在最后
$(eval $(call BuildPackage,helloworld))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/770209.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c->c++(二):class

本文主要探讨C类的相关知识。 构造和析构函数 构造函数(可多个):对象产生时调用初始化class属性、分配class内部需要的动态内存 析构函数(一个):对对象消亡时调用回收分配动态内存 C提供默认构造和析构,…

行人检测技术:思通数科大模型在自动驾驶安全中的应用

在自动驾驶技术飞速发展的今天,行人检测已成为确保道路交通安全的关键技术之一。本文将探讨如何结合思通数科大模型和计算机视觉技术,实现在城市交通环境中对行人的高效检测,为自动驾驶车辆提供必要的行人安全保障。 引言 行人检测技术是利…

Dubbo内部通信流程

我当时在学习的过程中搭建过demo,具体流程就是,我先定义了一个api接口模块,还定义一个服务提供者模块,然后服务提供方实现该接口,定义该方法具体的实现impl类,服务提供方启动时,将要暴露的服务和…

【架构-20】死锁

什么是死锁? 死锁(Deadlock)是指两个或多个线程/进程在执行过程中,由于资源的互相占用和等待,而陷入一种互相等待的僵局,无法继续往下执行的情况。 产生死锁的四个必要条件: (1)互斥条件(Mutual Exclusion):至少有一个资源是非共享…

跨阻放大器

#创作灵感# 最近涉及到微电流的监测项目,而里面的核心就是跨阻放大器,所以这里做一个简单的介绍,后续等项目完成了,再做一个实例的介绍。 #正文# 跨阻放大器(Transimpedance Amplifier, TIA)是一种将输入电…

Windows编程之多线程事件对象(Event Object)用法详解

目录 一、前言 二、基础用法 三、API详解 1.创建事件对象 2控制事件状态 3.等待事件对象: 四、实战案例 1.案例描述 2.代码设计 3.总设计代码 4.运行结果 一、前言 事件对象(Event Object)是我们在大型项目中,进行多线…

股价持续低迷,业绩颓势不减,冀光恒难救平安银行?

文|新熔财经 作者|宏一 周一一上班,就听到旁边的同事感慨今年股市行情很不错,尤其是银行股,上半年累计上涨了17.02%,是涨幅最大的板块。 听到这里,我美滋滋地打开自己的账户,结…

如何对低代码平台进行分类?

现在市面上的低代码平台就像雨后春笋一样冒出来,而且源源不绝,但总结下来,大致的也就以下三类。 一、 aPaaS多引擎类(有很多成熟引擎、做好东西要一起用) 这类产品包括:织信Informat(国内&…

照明物联网:基于网关的智能照明云监控系统解决方案

智能照明系统就是利用物联网技术,将同一空间的照明、空调、新风、排风等系统共同接入物联网平台,实现了“设备互联、数据互通”的智慧物联能力。照明数据、环境监测数据通过网关上传云端,在云端进行统计分析并将结果通过各种终端共享&#xf…

MySQL—常用的数据类型

数据类型 整型 1.创建一个含有无符号/有符号整型的字段的表 CREATE TABLE L1(id tinyint unsigned #无符号 ) CREATE TABLE L2(id tinyint #默认为有符号 ) 数值型(bit) 2.数值型(bit)的使用 小数 3.数值型(小数)的基本使用 字符串 4.字符串的基本使用 #演示字符串类型…

REGX52.H报错

keil cannot open source input file "REGX52.H": No such file or directory 选择下面这个目录 Keil\C51\INC\Atmel

AI绘画Stable Diffusion 新手入门教程:万字长文解析Lora模型的使用,快速上手Lora模型!

大家好,我是设计师阿威 今天给大家讲解一下AI绘画Stable Diffusion 中的一个重要模型—Lora模型,如果还有小伙伴没有SD安装包的,可以看我往期入门教程2024最新超强AI绘画Stable Diffusion整合包安装教程,零基础入门必备&#xff…

【软件测试】Selenium自动化测试框架 | 相关介绍 | Selenium + Java环境搭建 | 常用API的使用

文章目录 自动化测试一、selenium1.相关介绍1.Selenium IDE2.Webdriverwebdriver的工作原理: 3.selenium Grid 2.Selenium Java环境搭建3.常用API的使用1.定位元素2.操作测试对象3.添加等待4.打印信息5.浏览器的操作6.键盘事件7.鼠标事件8.定位一组元素9.多层框架定…

手把手家教你进行ChatGPT私有化部署

背景 随着AI技术的不断成熟,加上ChatGPT如火如荼的发布新版本迭代更新,人工智能的热度也升温到史无前例的高度。 我们有理由相信,现在身边还不愿主动去接触这项技术,深入了解的小伙伴,在不久的将来,一定会…

网络攻防——kali操作系统基本使用

1.阅读前的声明 本文章中生成的木马带有一定的攻击性,使用时请遵守网络安全相关的法律法规(恶意攻击操作系统属于违法行为)。 2.环境安装 生成木马主要需要如下工具:kali操作系统,VMware15(搭建kali操作…

用Python制作动态钟表:实时显示时间的动画

文章目录 引言准备工作前置条件 代码实现与解析导入必要的库初始化Pygame绘制钟表函数主循环 完整代码 引言 动态钟表是一种直观且实用的UI元素,能够实时显示当前时间。在这篇博客中,我们将使用Python创建一个动态钟表,通过利用Pygame库来实…

无线物联网题集

测试一 未来信息产业的发展在由信息网络向 全面感知和 智能应用两个方向拓展、延伸和突破。 各国均把 物联网作为未来信息化战略的重要内容,融合各种信息技术,突破互联网的限制,将物体接入信息网络。 计算机的出现,开始了第四次工业革命,开始了人机物的高度融合(&…

LVS负载均衡群集部署之——DR模式的介绍及搭建步骤

一、LVS-DR集群介绍1.1 LVS-DR 工作原理1.2 数据包流向分析1.3 LVS-DR 模式的特点1.4 LVS-DR中的ARP问题1.4.1 问题一1.4.2 问题二二、构建LVS-DR集群2.1 构建LVS-DR集群的步骤(理论)1.配置负载调度器(192.168.80.30)(…

护眼指南之适合学生写作业的台灯:看看学生护眼台灯哪个品牌好

随着人们健康意识的提高,越来越多的人开始关注眼睛的健康问题,照明技术的进步也为缓解眼疲劳提供了可能,现在的照明产品可以通过调整光线亮度、色温、频闪等参数,使光线更加柔和、均匀,减少眼睛的不适感。人们都希望通…

重生奇迹MU 最动听的声音 最精彩的游戏

在重生奇迹MU的世界里,每个玩家都是重生奇迹的见证者,同时也是重生奇迹的创造者。每个玩家都有属于自己的冒险故事,每时每刻都会有新的喜悦降临。这款神奇的游戏让人沉浸于冒险的精彩中,实在引人入胜。 “叮”的一声让你倍感喜悦…