2026/1/18 5:22:06
网站建设
项目流程
电子商务网站建设合同样本,网站被墙是谁做的,张掖建设局网站,把一个网站挂到网上要怎么做ohos-m4 是为 OpenHarmony 平台编译的 m4 宏处理器。本文档详细介绍如何在鸿蒙PC上安装和使用官方适配完成的 m4 工具#xff0c;包括 HNP 包的打包、安装和使用方法。 #x1f4cb; 目录
一、项目概述二、为什么需要 HNP 包三、HNP 包打包方法四、安装与使用五、使用示例六…ohos-m4是为 OpenHarmony 平台编译的 m4 宏处理器。本文档详细介绍如何在鸿蒙PC上安装和使用官方适配完成的 m4 工具包括 HNP 包的打包、安装和使用方法。 目录一、项目概述二、为什么需要 HNP 包三、HNP 包打包方法四、安装与使用五、使用示例六、常见问题七、总结与最佳实践八、参考资料一、项目概述1.1 m4 工具简介m4是一个强大的宏处理器由 Brian Kernighan 和 Dennis Ritchie 开发。它是 Unix/Linux 系统中重要的文本处理工具被广泛用于构建系统、配置文件生成和代码模板处理。核心特性宏处理支持宏定义、展开、条件判断等高级功能文本生成可以生成复杂的配置文件、代码文件等跨平台支持多种操作系统和平台构建系统基础是 autoconf、automake 等构建工具的基础依赖⚡轻量高效体积小处理速度快主要应用场景构建系统配置autoconf、automake配置文件模板处理代码生成和模板化文本处理和转换与 autotools 工具链配合使用1.2 项目信息项目信息详情项目名称ohos-m4版本1.4.20官方适配版本许可证GPL-3.0目标平台鸿蒙PC (aarch64-linux-ohos)源码仓库https://www.gnu.org/software/m4/适配仓库https://github.com/Harmonybrew/ohos-m4预构建包https://github.com/Harmonybrew/ohos-m4/releases编译方式交叉编译在 Linux x64 上1.3 m4 与其他工具的区别特性m4rubyninja类型宏处理器编程语言解释器构建工具依赖静态链接零依赖需要 openssl、yaml 等静态链接零依赖编译方式交叉编译在 Linux/macOS 上本地编译在鸿蒙容器中交叉编译在 Linux/macOS 上可执行文件仅 m4 一个ruby、irb、gem 等多个仅 ninja 一个使用场景宏处理和文本生成运行 Ruby 脚本、开发应用执行构建任务构建系统角色构建系统的基础工具独立运行环境构建执行器1.4 为什么需要 ohos-m4在鸿蒙PC上进行开发时我们经常需要✅构建系统支持许多开源项目使用 autoconf/automake需要 m4 作为基础工具✅配置文件生成使用 m4 宏处理生成复杂的配置文件✅代码模板化通过 m4 宏实现代码的模板化和生成✅工具链完整性完整的构建工具链需要包含 m4二、为什么需要 HNP 包2.1 系统安全限制重要说明在鸿蒙PC上由于系统安全规格限制等原因暂不支持通过解压 配 PATH的方式直接使用 tar.gz 包。这意味着❌ 不能直接解压 tar.gz 包到任意目录❌ 不能通过设置 PATH 环境变量来使用✅ 必须打包成 HNPHarmonyOS Native Package格式才能正常使用2.2 HNP 包的优势HNP 包是鸿蒙PC的官方包管理格式具有以下优势✅系统集成与鸿蒙PC的包管理系统集成✅安全可靠通过官方工具安装符合系统安全规范✅易于管理支持安装、卸载、更新等操作✅路径规范统一安装在/data/service/hnp/目录下2.3 其他平台的使用方式在鸿蒙开发板上可以使用 hdc 推送 tar.gz 包支持解压 配 PATH的方式在鸿蒙容器中可以直接下载 tar.gz 包支持解压 配 PATH的方式三、HNP 包打包方法3.1 准备工作3.1.1 下载预构建包首先从 release 页面 下载官方适配完成的预构建包# 下载 m4 预构建包wgethttps://github.com/Harmonybrew/ohos-m4/releases/download/1.4.20/m4-1.4.20-ohos-arm64.tar.gz3.1.2 解压并查看结构# 解压 tar.gz 包tar-zxf m4-1.4.20-ohos-arm64.tar.gz# 查看目录结构tree m4-1.4.20-ohos-arm64/目录结构示例m4-1.4.20-ohos-arm64/ ├── bin/ │ └── m4 # m4 可执行文件 ├── share/ │ └── info/ # 文档信息 ├── COPYING # 许可证文件 └── AUTHORS # 作者信息3.2 创建 HNP 包配置3.2.1 创建 hnp.json在解压后的目录中创建hnp.json配置文件{type:hnp-config,name:m4,version:1.4.20,install:{links:[{source:bin/m4,target:m4}]}}配置说明type: 固定为hnp-configname: 包名称m4version: 版本号1.4.20install.links: 安装时的符号链接配置source: 源文件路径相对于安装目录target: 链接目标名称命令名称3.2.2 准备安装目录结构按照 HNP 包的路径规则准备安装目录# HNP 包的路径规则${HNP_PUBLIC_PATH}/包名.org/包名_版本号# 例如/data/service/hnp/m4.org/m4_1.4.20exportHNP_PUBLIC_PATH/data/service/hnpexportM4_INSTALL_PATH${HNP_PUBLIC_PATH}/m4.org/m4_1.4.20# 创建安装目录mkdir-p${M4_INSTALL_PATH}3.3 打包脚本3.3.1 方法一手动打包创建打包脚本pack_hnp.sh#!/bin/bashset-e# 配置变量M4_VERSION1.4.20TAR_FILEm4-${M4_VERSION}-ohos-arm64.tar.gzEXTRACT_DIRm4-${M4_VERSION}-ohos-arm64HNP_PUBLIC_PATH/data/service/hnpM4_INSTALL_PATH${HNP_PUBLIC_PATH}/m4.org/m4_${M4_VERSION}OUTPUT_DIRoutputWORKDIR$(pwd)# 创建输出目录mkdir-p${OUTPUT_DIR}# 解压 tar.gz 包if[!-d${EXTRACT_DIR}];thenecho解压${TAR_FILE}...tar-zxf${TAR_FILE}fi# 创建安装目录echo创建安装目录...mkdir-p${M4_INSTALL_PATH}# 复制文件保留目录结构echo复制文件...cp-r${EXTRACT_DIR}/*${M4_INSTALL_PATH}/# 创建 hnp.jsonecho创建 hnp.json...cat${M4_INSTALL_PATH}/hnp.jsonEOF { type: hnp-config, name: m4, version: 1.4.20, install: { links: [ { source: bin/m4, target: m4 } ] } } EOF# 设置执行权限echo设置执行权限...chmodx${M4_INSTALL_PATH}/bin/*# 使用 hnpcli 打包如果可用ifcommand-v hnpcli/dev/null;thenecho使用 hnpcli 打包...hnpcli pack -i${M4_INSTALL_PATH}-o${OUTPUT_DIR}/echoHNP 包已生成:${OUTPUT_DIR}/m4.hnpelseecho警告: 未找到 hnpcli 工具跳过 HNP 包生成echo请手动使用 hnpcli 打包:echo hnpcli pack -i${M4_INSTALL_PATH}-o${OUTPUT_DIR}/fi# 生成 tar.gz 包备用echo生成 tar.gz 包...cd${HNP_PUBLIC_PATH}/m4.orgtar-zcf${WORKDIR}/${OUTPUT_DIR}/ohos_m4_${M4_VERSION}.tar.gz m4_${M4_VERSION}/cd-/dev/nullecho打包完成echo输出文件echo -${OUTPUT_DIR}/m4.hnp (如果 hnpcli 可用)echo -${OUTPUT_DIR}/ohos_m4_${M4_VERSION}.tar.gz3.4 验证打包结果打包完成后验证生成的文件# 检查 HNP 包ls-lh output/m4.hnp# 检查 tar.gz 包ls-lh output/ohos_m4_1.4.20.tar.gz# 验证安装目录结构tree${M4_INSTALL_PATH}/预期的安装目录结构/data/service/hnp/m4.org/m4_1.4.20/ ├── bin/ │ └── m4 # m4 可执行文件 ├── share/ │ └── info/ # 文档信息 ├── COPYING # 许可证文件 ├── AUTHORS # 作者信息 └── hnp.json # HNP 配置文件四、安装与使用4.1 安装 HNP 包手动安装使用 tar.gz# 在鸿蒙PC上执行# 1. 解压 tar.gz 包tar-xzf ohos_m4_1.4.20.tar.gz# 2. 复制到安装目录sudocp-r m4_1.4.20/* /data/service/hnp/m4.org/m4_1.4.20/# 3. 设置执行权限sudochmodx /data/service/hnp/m4.org/m4_1.4.20/bin/m4# 4. 创建符号链接根据 hnp.json 配置# hnp 系统会自动处理 links 配置但也可以手动创建sudoln-sf /data/service/hnp/m4.org/m4_1.4.20/bin/m4 /usr/local/bin/m44.2 验证安装# 检查 m4 是否在 PATH 中whichm4# 检查版本m4 --version# 应该输出m4 (GNU M4) 1.4.204.3 配置 PATH可选如果 m4 命令不在 PATH 中可以手动添加到 PATH# 临时添加到 PATH当前会话有效exportPATH$PATH:/data/service/hnp/m4.org/m4_1.4.20/bin# 永久添加到 PATH添加到 ~/.bashrc 或 ~/.zshrcechoexport PATH$PATH:/data/service/hnp/m4.org/m4_1.4.20/bin~/.bashrcsource~/.bashrc五、使用示例5.1 基本使用5.1.1 查看帮助m4 --help5.1.2 查看版本m4 --version# 输出: m4 (GNU M4) 1.4.205.1.3 处理简单宏# 创建一个简单的 m4 文件catexample.m4EOF define(NAME, World) Hello, NAME! EOF# 使用 m4 处理m4 example.m4# 输出: Hello, World!5.2 宏定义和使用5.2.1 定义宏# 创建宏定义文件catmacros.m4EOF define(VERSION, 1.0.0) define(AUTHOR, HarmonyOS Developer) define(DATE, 2025-01-01) EOF# 使用宏catconfig.m4EOF include(macros.m4) Project: MyProject Version: VERSION Author: AUTHOR Date: DATE EOF# 处理文件m4 config.m4# 输出:# Project: MyProject# Version: 1.0.0# Author: HarmonyOS Developer# Date: 2025-01-015.2.2 条件判断# 创建带条件的 m4 文件catconditional.m4EOF define(DEBUG, 1) ifelse(DEBUG, 1, #define DEBUG_MODE 1, #define DEBUG_MODE 0) EOF# 处理文件m4 conditional.m4# 输出: #define DEBUG_MODE 15.3 与 autoconf 配合使用5.3.1 生成 configure 脚本m4 是 autoconf 的基础工具autoconf 使用 m4 来生成 configure 脚本# 在包含 configure.ac 的项目中# autoconf 会使用 m4 处理宏生成 configure 脚本# 示例如果项目使用 autoconfcd/path/to/project autoconf# 内部会调用 m4 处理宏5.3.2 处理 autoconf 宏# autoconf 定义的宏示例cattest.m4EOF AC_INIT([myproject], [1.0]) AC_CONFIG_FILES([Makefile]) AC_OUTPUT EOF# 使用 autoconf 处理内部使用 m4# autoconf test.m45.4 实际应用场景场景 1生成配置文件# 创建模板文件catconfig.h.inEOF #define VERSION VERSION #define PREFIX PREFIX #define DATADIR DATADIR EOF# 创建 m4 处理脚本catgenerate_config.shEOF #!/bin/bash VERSION1.0.0 PREFIX/usr/local DATADIR${PREFIX}/share m4 -DVERSION${VERSION} \ -DPREFIX${PREFIX} \ -DDATADIR${DATADIR} \ config.h.in config.h EOFchmodx generate_config.sh ./generate_config.sh场景 2代码模板化# 创建函数模板catfunction.m4EOF define(FUNCTION, int $1(int x) { return x * 2; }) EOF# 生成多个函数catfunctions.c.m4EOF include(function.m4) FUNCTION(double) FUNCTION(triple) EOF# 处理生成 C 代码m4 functions.c.m4functions.c场景 3批量文本替换# 创建替换规则catreplace.m4EOF define(OLD_TEXT, NEW_TEXT) define(OLD_NAME, NEW_NAME) EOF# 处理文件m4 -DOLD_TEXTHello-DOLD_NAMEWorldinput.txtoutput.txt5.5 高级用法5.5.1 使用预定义宏# m4 提供了一些预定义宏catpredefined.m4EOF __file__: __file__ __line__: __line__ __program__: __program__ EOFm4 predefined.m4# 输出当前文件名、行号和程序名5.5.2 递归宏展开# 创建递归宏catrecursive.m4EOF define(COUNTDOWN, ifelse($1, 0, 0, $1 COUNTDOWN(decr($1)))) COUNTDOWN(5) EOFm4 recursive.m4# 输出: 5 4 3 2 1 05.5.3 文件包含# 创建公共宏文件catcommon.m4EOF define(PROJECT_NAME, MyProject) define(VERSION, 1.0.0) EOF# 在其他文件中包含catmain.m4EOF include(common.m4) Project: PROJECT_NAME Version: VERSION EOFm4 main.m4六、常见问题Q1: 为什么不能直接使用 tar.gz 包A:由于鸿蒙PC的系统安全规格限制不允许通过解压 配 PATH的方式直接使用软件包。必须使用 HNP 包格式通过官方包管理工具安装。Q2: 如何获取 hnpcli 工具A:hnpcli 是鸿蒙PC的包管理工具通常包含在 OHOS SDK 中。你可以从 OHOS SDK 下载参考 DevBox 项目获取构建工具Q3: 安装后找不到 m4 命令A:检查以下几点确认安装路径是否正确/data/service/hnp/m4.org/m4_1.4.20/bin/m4检查 PATH 环境变量是否包含该路径检查 hnp.json 中的 links 配置是否正确尝试手动创建符号链接Q4: 如何卸载 m4A:手动卸载# 删除安装目录sudorm-rf /data/service/hnp/m4.org/m4_1.4.20# 删除符号链接sudorm-f /usr/local/bin/m4Q5: 可以在开发板上使用 tar.gz 包吗A:可以。在鸿蒙开发板上可以使用 hdc 推送 tar.gz 包然后解压使用hdcfilesend m4-1.4.20-ohos-arm64.tar.gz /data hdc shellcd/datatar-zxf m4-1.4.20-ohos-arm64.tar.gzexportPATH$PATH:/data/m4-1.4.20-ohos-arm64/binQ6: 如何更新到新版本A:下载新版本的预构建包按照打包步骤重新打包卸载旧版本hnp uninstall m4安装新版本hnp install m4.hnpQ7: m4 处理文件时出错怎么办A:检查以下几点确认宏定义是否正确检查引号使用是否正确m4 使用反引号 和单引号 查看详细错误信息m4 -d example.m4检查文件编码是否为 UTF-8Q8: m4 与 autoconf 的关系是什么A:m4 是 autoconf 的基础工具。autoconf 使用 m4 宏来生成 configure 脚本。当你运行autoconf时它会使用 m4 处理configure.ac文件中的宏生成configure脚本。Q9: 如何从源码构建 m4A:参考项目中的build.sh脚本准备 OHOS SDK 和交叉编译工具链下载 m4 源码应用补丁适配鸿蒙平台配置并编译详细步骤请参考项目 README。七、总结与最佳实践7.1 安装最佳实践使用 HNP 包始终使用 HNP 包格式在鸿蒙PC上安装版本管理明确指定版本号避免版本冲突路径规范遵循 HNP 包的路径规范/data/service/hnp/包名.org/包名_版本号7.2 使用最佳实践宏命名规范使用大写字母和下划线命名宏如PROJECT_NAME、VERSION_NUMBER引号使用正确使用反引号 和单引号 ’ 来定义和引用宏文件组织将公共宏定义放在单独的文件中使用include()包含错误处理使用-d参数调试宏展开过程7.3 与构建系统集成autoconf 项目m4 是 autoconf 的必需依赖确保在构建环境中可用宏库管理合理组织 m4 宏库便于复用和维护版本兼容注意不同版本的 m4 可能有不同的宏行为7.4 故障排查查看宏展开使用m4 -d查看详细的宏展开过程检查语法确认反引号和单引号的使用是否正确验证宏定义使用m4 --traceMACRO_NAME跟踪特定宏的展开测试隔离在单独的文件中测试宏定义确认无误后再集成 附录A. 文件清单 预构建包:m4-1.4.20-ohos-arm64.tar.gz- 官方适配完成的预构建包 配置文件:hnp.json- HNP 包配置文件0001-port-gnulib-to-ohos.patch- 适配鸿蒙平台的补丁文件 生成文件:m4.hnp- HNP 格式安装包ohos_m4_1.4.20.tar.gz- tar.gz 格式发布包B. 常用命令# 打包命令./pack_hnp.sh# 安装命令hnpinstallm4.hnp# 验证安装m4 --version# 处理 m4 文件m4 input.m4output.txt# 调试模式m4 -d input.m4# 跟踪宏展开m4 --traceMACRO_NAME input.m4C. 版本信息m4 版本: 1.4.20适配日期: 2025-01-15目标平台: aarch64-linux-ohos构建系统: autotools (configure make)包格式: HNP (HarmonyOS Native Package)编译方式: 交叉编译需要 OHOS SDK 结语本文档详细介绍了如何在鸿蒙PC上安装和使用官方适配完成的 m4 宏处理器。通过将预构建的 tar.gz 包打包成 HNP 格式我们可以在鸿蒙PC上安全、规范地使用 m4 工具。希望本文档能够帮助开发者 理解 HNP 包的必要性和打包方法 掌握 m4 在鸿蒙PC上的安装和使用 学习 m4 宏处理的基本用法和高级技巧 提升构建系统和代码生成的效率 如有问题或建议欢迎反馈