CMake构建工程配置HarmonyOS编译工具链


📚鸿蒙开发往期学习笔录✒️:

✒️ 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~
✒️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景?
✒️ 嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~
✒️ 对于大前端开发来说,转鸿蒙开发究竟是福还是祸?
✒️ 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?
✒️ 记录一场鸿蒙开发岗位面试经历~
✒️ 持续更新中……


简介

CMake是一个跨平台的构建工具,用于管理构建过程、编译、链接和打包软件项目,它可以生成Makefile等用于不同操作系统和编译器的构建脚本。CMake的配置过程是跨平台的,因此可以在不同的操作系统上运行,例如Linux、Windows和macOS。

CMake构建过程可分为以下三个主要步骤:

  • 配置(Configuration):配置阶段是CMake解析CMakeLists.txt文件的过程。在配置阶段,CMake会读取CMakeLists.txt文件,并执行其中的命令。CMakeLists.txt文件是CMake的核心,其定义了项目的构建规则和依赖关系。
  • 生成(Generation):生成阶段是CMake根据配置阶段的结果,生成实际构建文件的过程。在生成阶段,CMake会将CMakeLists.txt文件中定义的构建规则和依赖关系转为构建工具可以理解的形式。
  • 构建(Build):构建阶段是使用构建工具(如Make或DevEco Studio)根据生成的构建文件,编译源代码并链接生成目标文件的过程。在构建阶段,构建工具会读取生成的构建文件,按照其中定义的规则和依赖关系,执行实际的编译和链接操作。

CMake构建三方库适配流程

本小节介绍如何在Linux环境下,使用CMake构建工具通过ohos sdk编译cJSON三方库源码,生成ohos平台三方库的so及二进制文件。

### 如何构建或使用LLVM交叉编译工具链 #### 背景概述 LLVM 是一种现代化的编译框架,提供了强大的功能来支持多种架构下的代码生成和优化。通过构建 LLVM 的交叉编译工具链开发者可以在主机平台上为目标平台生成可执行文件或库。这在嵌入式开发移动设备应用(如 HarmonyOS)、以及多平台支持场景中尤为重要。 --- #### 下载并初始化 LLVM 工具链 为了获取最新的 LLVM 工具链版本,可以利用 `git` 命令克隆官方仓库中的资源[^2]: ```bash git clone https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm.git cd LLVM-embedded-toolchain-for-Arm ``` 上述操作会下载针对 ARM 平台优化过的 LLVM 工具链,适用于许多嵌入式系统的开发需求。 --- #### 配置交叉编译环境变量 当目标平台不同于当前运行的操作系统时,需设置特定的编译器路径及相关参数。以下是常见的配置方式: 1. **指定编译器** 定义 `CC` 和 `CXX` 变量指向 Clang 或其他兼容的编译器[^5]: ```bash export CC="clang" export CXX="clang++" ``` 2. **调整链接器和其他工具** 如果需要进一步控制构建过程,则可以通过如下方法定义更多工具链组件[^1]: ```makefile AR=llvm-ar RANLIB=llvm-ranlib STRIP=llvm-strip ``` 这些指令确保 Make 文件或其他脚本调用了正确的 LLVM 实现而非默认系统级二进制程序。 --- #### 创建 CMakeLists.txt 进行项目管理 对于复杂的工程项目来说,采用 CMake 来简化依赖关系管理和自动化构建流程是非常推荐的做法之一。下面展示了一个简单的例子用于演示如何基于 LLVM 设置交叉编译模式: ```cmake set(CMAKE_SYSTEM_NAME Linux) # 设定目标操作系统名称 set(CMAKE_C_COMPILER clang) # 明确指出使用的 c 编辑器为 clang set(CMAKE_CXX_COMPILER clang++) # 同理指明 cpp 版本编辑器为何物即 clang++ set(CMAKE_FIND_ROOT_PATH /path/to/sysroot) include_directories(/usr/arm-linux-gnueabihf/include) link_directories(/usr/arm-linux-gnueabihf/lib) add_executable(hello hello.c) target_link_libraries(hello pthread dl m rt) ``` 注意这里假设已经安装好对应体系结构头文件与共享对象所在的 sysroot 目录位置;如果没有的话则可能还需要额外准备它们才行。 --- #### Windows 上的应用实例 尽管大多数情况下我们讨论的是类 Unix 系统上的解决方案,但在某些特殊场合也可能遇到要在 Microsoft Windows 中实施相同逻辑的需求。此时借助 MinGW-W64 提供的支持便显得尤为关键了[^4]: > 在 windows platform 下面建立 mingw-w64-x86_64 所主持得跨越工具链条目录结构... 具体而言就是先确认已具备恰当版本 gcc/g++ 组件之后再按照前述类似思路完成定制化改造即可满足实际工作所需。 --- #### 总结说明 综上所述,无论是从零开始搭建还是直接运用现有成果,只要遵循相应指导原则都能够顺利达成预期目的 —— 即成功建立起一套完整的 llvm-based cross compilation environment 。当然除此之外还有诸如 bazel-driven approaches [^3]之类的替代方案可供探索尝试看哪个更适合自己的具体情况而选用之。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值