鸿蒙HarmonyOS NEXT开发指南:Make构建工程配置与编译工具链详解

2024-12-12 0 713

软件开发中,自动化编译工具扮演着关键角色。比如,Make,它是Unix系统下的常用构建工具,其主要功能就是自动化编译。这一特性是其核心价值所在。它能高效处理源文件间的复杂依赖和编译顺序等问题,大大提升了开发效率。

Make工具简介

Make是一款非常实用的Unix构建工具。它能解析规则和依赖关系,进而构建源代码。其智能之处在于,会检查源代码文件的时间标记,以判断是否需要重新编译。比如在大型项目中,一旦文件被更新,它便能迅速识别出哪些相关文件需要重新编译。执行Make命令时,它会按照指令构建代码,最终生成可执行程序或库文件。在众多Linux开发环境中,Make会按照makefile中的规则,有条不紊地执行任务,助力开发者高效处理工程的编译和链接等繁琐事务。

owner@ubuntu:/mnt/e/make-makefile$ wget https://sourceforge.net/projects/bzip2/files/bzip2-1.0.6.tar.gz     # 下载源码包

Makefile是Make工具的核心组件。它详细说明了编译过程中的各项规则,包括先编译哪些文件,后编译哪些文件等。开发者通过编写Makefile,可以自动化地管理项目的构建过程。在网络应用开发等实际项目中,Makefile会明确众多源文件和库文件之间的复杂依赖顺序。如果没有这样的文件,手动判断依赖关系将耗费大量时间和精力,难以高效准确地完成项目构建。

owner@ubuntu:/mnt/e/make-makefile$ tar -zxf bzip2-1.0.6.tar.gz                    # 解压源码包
owner@ubuntu:/mnt/e/make-makefile$
owner@ubuntu:/mnt/e/make-makefile$ cd bzip2-1.0.6/                                # 进入到bzip2源码目录
owner@ubuntu:/mnt/e/make-makefile/bzip2-1.0.6$

在Linux系统中,我们常用Make来编译bzip2第三方库的源代码。对于OHOS系统,我们需要将非OHOS的工具链调整为OHOS的工具链。通过分析源库文件,我们发现有很多地方需要重新设置。比如,在Linux下,原本使用gcc编译的命令需要改为交叉编译命令。还有一些默认设置,比如安装路径原本在系统的/usr/local/目录下,但为了适配OHOS系统,在执行安装时需要改为用户目录下。这些调整都是在Linux环境下编译第三方库时,为适配OHOS系统所必须进行的关键转换。

鸿蒙HarmonyOS NEXT开发指南:Make构建工程配置与编译工具链详解

编译指令的设置非常关键。在设置CC时,不仅要将其设置为用于交叉编译的clang,还需指定具体的架构类型。若目标设备为64位,必须正确设置架构。若编译32位文件,则可配置为arm-linux-ohos。在编译bzip2库时,依照这些设置,任务得以顺利完成。比如,在实际编译过程中,若配置不当,可能会引发编译错误,或者编译出的文件在目标设备上无法使用。这些配置是为了确保库文件在目标设备上能够准确运行而设定的。

# To assist in cross-compiling
CC=gcc 
AR=ar  
RANLIB=ranlib                                  

使用bzip2工具查看编译输出的文件特性。编译过程选择了Linux和Ohos选项,结果显示文件属于ARM架构,这表明交叉编译已顺利完成。安装时,需准确设定安装路径变量,这是保证程序未来稳定运行的关键。另外,为进行测试,我们将全部编译源码打包,利用hdc工具发送到开发设备上。同时,确保第三方库在开发板上的路径与编译时的路径保持一致,才算完成了准备工作。

# Where you want it installed when you do 'make install'
PREFIX=/usr/local                                          

编译完成的bzip2库需要经过测试。经过6个测试案例,若未出现任何错误,即表明库测试合格。遇到不确定结果的情况,开发者可以手动通过“echo$?”来查看测试结果。这一系列步骤对于确保编译后的第三方库准确性至关重要。若未进行充分测试便用于项目开发集成,可能会导致后续运行时出现错误。

owner@ubuntu:/mnt/e/make-makefile/bzip2-1.0.6$ make CC=xxx/ohos-sdk/linux/native/llvm/bin/clang --target=aarch64-linux-ohos AR=xxx/ohos-sdk/linux/native/llvm/bin/llvm-ar RANDLIB=xxx/ohos-sdk/linux/native/llvm/bin/llvm-ranlib -j4 libbz2.a bzip2 bzip2recover
xxx/ohos-sdk/linux/native/llvm/bin/clang --target=aarch64-linux-ohos -Wall -Winline -O2 -g -D_FILE_OFFSET_BITS=64 -c huffman.c
xxx/ohos-sdk/linux/native/llvm/bin/clang --target=aarch64-linux-ohos -Wall -Winline -O2 -g -D_FILE_OFFSET_BITS=64 -c crctable.c
...
# 省略部分make信息
...
xxx/ohos-sdk/linux/native/llvm/bin/llvm-ar cq libbz2.a blocksort.o huffman.o crctable.o randtable.o compress.o decompress.o bzlib.o
ranlib libbz2.a
1 warning generated.
xxx/ohos-sdk/linux/native/llvm/bin/clang --target=aarch64-linux-ohos -Wall -Winline -O2 -g -D_FILE_OFFSET_BITS=64  -o bzip2 bzip2.o -L. -lbz2
owner@ubuntu:~/workspace/bzip2-1.0.6$

那么,在使用Make构建工具适配不同平台时,大家最常遇到的问题是什么?欢迎点赞、转发这篇文章,并在评论区交流意见。

owner@ubuntu:/mnt/e/make-makefile/bzip2-1.0.6$ file bzip2             # 使用file查看生成的文件属性
bzip2: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-aarch64.so.1, with debug_info, not stripped
owner@ubuntu:/mnt/e/make-makefile/bzip2-1.0.6$

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

七爪网 行业资讯 鸿蒙HarmonyOS NEXT开发指南:Make构建工程配置与编译工具链详解 https://www.7claw.com/2802405.html

七爪网源码交易平台

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务