尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

鸿蒙 NDK开发:使用命令行CMake构建工程(三)

鸿蒙 NDK开发:使用命令行CMake构建工程(三)
📅 发布时间:2026/6/23 16:02:48

当C++代码工程需要独立于DevEco Studio进行编译时,可以使用命令行方式将现有CMake工程切换到HarmonyOS工具链。

一、获取NDK开发包

方式一:通过Command Line Tools获取

下载command line tools并解压,NDK开发相关工具位于:

$command_line_tools解压目录/sdk/default/openharmony/native

方式二:通过DevEco Studio获取

下载并安装DevEco Studio,NDK开发相关工具位于:

$DevEco Studio安装目录/sdk/default/openharmony/native

二、配置环境变量

说明:如果只是在DevEco Studio中使用,跳过此步骤。

Linux系统

# 打开.bashrc文件 vim ~/.bashrc # 在文件最后添加cmake路径 export PATH=${实际SDK路径}/native/build-tools/cmake/bin:$PATH # 使环境变量生效 source ~/.bashrc

Mac系统

# 打开.bash_profile文件 vim ~/.bash_profile # 在文件最后添加cmake路径 export PATH=${实际SDK路径}/native/build-tools/cmake/bin:$PATH # 使环境变量生效 source ~/.bash_profile

Windows系统

右键点击“我的电脑” → “属性” → “高级系统设置” → “环境变量”,找到“Path”并点击“编辑”,添加NDK中cmake的bin目录路径。

验证环境变量配置:

cmake.exe -version # 正确回显cmake版本号则说明配置完成

三、CMake命令参数

参数说明可选值
OHOS_STLC++运行时库链接方式c++_shared(默认)/ c++_static
OHOS_ARCH目标编译架构armeabi-v7a / arm64-v8a / x86_64
OHOS_PLATFORM平台标识OHOS
CMAKE_TOOLCHAIN_FILEtoolchain文件路径ndk路径下的ohos.toolchain.cmake

参数作用:

  • OHOS_ARCH+OHOS_PLATFORM→ 生成--target=arm-linux-ohos等clang++命令参数

  • CMAKE_TOOLCHAIN_FILE→ 默认给clang++设置--sysroot,指定系统头文件根目录

四、示例

4.1 工程目录结构

demo ├── CMakeLists.txt # 根目录CMake配置 ├── include │ └── sum.h # 头文件 └── src ├── CMakeLists.txt # 子目录CMake配置 ├── sum.cpp # 算法实现 └── hello.cpp # 主入口

4.2 源码内容

根目录CMakeLists.txt:

# 指定CMake的最小版本 CMAKE_MINIMUM_REQUIRED(VERSION 3.16) # 工程名称 PROJECT(HELLO) # 添加一个子目录并构建该子目录 ADD_SUBDIRECTORY(src)

src目录CMakeLists.txt:

SET(LIBHELLO_SRC hello.cpp) # 设置编译参数 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0") # 设置链接参数 SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--emit-relocs --verbose") # 添加动态库目标(libsum.so) ADD_LIBRARY(sum SHARED sum.cpp) # 生成可执行程序(Hello) ADD_EXECUTABLE(Hello ${LIBHELLO_SRC}) # 指定头文件目录 TARGET_INCLUDE_DIRECTORIES(Hello PUBLIC ../include) # 指定链接库 TARGET_LINK_LIBRARIES(Hello PUBLIC sum)

hello.cpp:

#include <iostream> #include "sum.h" int main(int argc, const char **argv) { std::cout << "hello world!" << std::endl; int total = sum(1, 100); std::cout << "Sum 1 + 100=" << total << std::endl; return 0; }

sum.h:

int sum(int a, int b);

sum.cpp:

#include <iostream> int sum(int a, int b) { return a + b; }

4.3 Linux/Mac编译构建

# 创建build目录 mkdir build && cd build # 动态链接方式(默认c++_shared) cmake -D OHOS_STL=c++_shared \ -D OHOS_ARCH=arm64-v8a \ -D OHOS_PLATFORM=OHOS \ -D CMAKE_TOOLCHAIN_FILE={ohos-sdk}/linux/native/build/cmake/ohos.toolchain.cmake \ .. # 执行构建 cmake --build .

静态链接方式:

cmake -D OHOS_STL=c++_static \ -D OHOS_ARCH=arm64-v8a \ -D OHOS_PLATFORM=OHOS \ -D CMAKE_TOOLCHAIN_FILE={ohos-sdk}/linux/native/build/cmake/ohos.toolchain.cmake \ ..

注意:需要将{ohos-sdk}替换为实际的SDK下载目录。

4.4 Windows编译构建

# 进入build目录 cd build # 使用Ninja生成器 cmake -G "Ninja" \ -D OHOS_STL=c++_shared \ -D OHOS_ARCH=arm64-v8a \ -D OHOS_PLATFORM=OHOS \ -D CMAKE_TOOLCHAIN_FILE=F:\\windows\\native\\build\\cmake\\ohos.toolchain.cmake \ .. # 执行Ninja编译 ninja -f build.ninja # 或使用cmake命令 cmake --build .

Debug调试:如需debug调试,增加参数-D CMAKE_BUILD_TYPE=Debug。

五、动态链接 vs 静态链接

对比项动态链接(c++_shared)静态链接(c++_static)
运行时加载运行时加载库文件库代码直接嵌入可执行文件
库文件形式.a(静态库).so(共享库)
磁盘空间节省更大
库更新需要重新编译无需重新编译
启动性能有加载开销更快
适用场景对磁盘空间敏感的应用对启动性能敏感或运行环境受限的场景

命令行CMake构建NDK工程需通过CMAKE_TOOLCHAIN_FILE指定ohos.toolchain.cmake,并通过OHOS_ARCH(arm64-v8a/armeabi-v7a/x86_64)、OHOS_STL(c++_shared/c++_static)、OHOS_PLATFORM=OHOS参数配置编译环境,Windows下需使用-G "Ninja"指定生成器。

相关新闻

  • Windows系统文件FM20.DLL丢失找不到问题解决
  • 为什么你越讨好别人,越没人把你当回事?
  • Shell脚本为何成为AI智能体视觉(TVA)的“反射弧”(7)

最新新闻

  • Hermes Agent v0.14.0:从命令行玩具到生产级AI助手的工程跃迁
  • Vue加载指示器系统:可嵌套、可中断、带业务语义的工程化实践
  • OpenClaw在DigitalOcean上的稳定部署与故障排查指南
  • 快速选择算法的最坏情况分析与尾部分布研究
  • Clos网络架构实战:40G spine-leaf设计与BGP/EVPN落地指南
  • Ansible自动化部署Drupal 7到Ubuntu 14.04实战指南

日新闻

  • Arduino-ESP32项目深度解析:解锁隐藏芯片支持与架构演进
  • 2026年 系统窗厂家/品牌推荐榜单:隔音系统窗+高端系统门窗的核心优势与选购指南 - 品牌发掘
  • NVBench:首个双语非言语发声语音合成评测基准详解与实践

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号