鸿蒙ndk
鸿蒙 NDK目录简介
1.1 ohos.toolchain.cmake
% pwd
~/Library/Huawei/Sdk/HarmonyOS-NEXT-DP2/base/native/build/cmake
% ls
ohos.toolchain.cmake sdk_native_platforms.cmake
1.2 cmake
% cd ../
% ls
cmake
% cd ../
% ls
NOTICE.txt build-tools nativeapi_syscap_config.json oh-uni-package.json
build llvm ndk_system_capability.json sysroot
% cd build-tools
% ls
cmake
% cmake -version
cmake version 3.29.4
CMake suite maintained and supported by Kitware (kitware.com/cmake).
% pwd
~/Library/Huawei/Sdk/HarmonyOS-NEXT-DP2/base/native/build-tools
1.3 llvm
% pwd
~/Library/Huawei/Sdk/HarmonyOS-NEXT-DP2/base/native/build-tools
% ls
cmake
% cd ../
% ls
NOTICE.txt build-tools nativeapi_syscap_config.json oh-uni-package.json
build llvm ndk_system_capability.json sysroot
% cd llvm
% ls
NOTICE bin include lib libexec python3 script share
% cd bin
% ls
FileCheck git-clang-format llvm-config llvm-size
aarch64-unknown-linux-ohos-clang ld.lld llvm-cov llvm-strings
aarch64-unknown-linux-ohos-clang++ ld64.lld llvm-cxxfilt llvm-strip
armv7-unknown-linux-ohos-clang llc llvm-dis llvm-symbolizer
armv7-unknown-linux-ohos-clang++ lld llvm-dwp not
clang lld-link llvm-lib opt
clang++ lldb llvm-link python
clang-15 lldb-argdumper llvm-modextract sancov
clang-check lldb-mi llvm-nm sanstats
clang-cl lldb-server llvm-objcopy scan-build
clang-cpp lldb-vscode llvm-objdump scan-view
clang-format lldb.sh llvm-profdata x86_64-unknown-linux-ohos-clang
clang-tidy llvm-addr2line llvm-ranlib x86_64-unknown-linux-ohos-clang++
clangd llvm-ar llvm-rc yaml2obj
count llvm-as llvm-readelf
dsymutil llvm-cfi-verify llvm-readobj
ohos.toolchain.cmake
简介
ohos.toolchain.cmake
是HarmonyOS NDK
提供给CMake
的toolchain
脚本,里面预定义了编译HarmonyOS
应用需要设置的编译参数,如交叉编译设备的目标、C++
运行时库的链接方式等;这些参数在调用CMake
命令时,可以从命令行传入,来改变默认编译链接行为。此文件中的常用参数见下表。
OHOS_STL
c++_shared/c++_static
libc++
的链接方式。默认为c++_shared
。
c++_shared
表示采用动态链接libc++_shared.so
;c++_static
表示采用静态链接libc++_static.a
。
由于C++
运行时中存在一些全局变量,因此同一应用中的全部Native库需要采用相同的链接方式。
OHOS_ARCH
armeabi-v7a/arm64-v8a/x86_64
设置当前Native
交叉编译的目标架构,当前支持的架构为armeabi-v7a/arm64-v8a/x86_64
。
OHOS_PLATFORM
OHOS
选择平台。当前只支持HarmonyOS
平台。
上述参数最终会控制Clang
的交叉编译命令,产生合适的命令参数。
--target={arch}-linux-ohos
参数,通知编译器生成相应架构下符合HarmonyOS ABI
的二进制文件。
--sysroot={ndk_root}/sysroot
参数,告知编译器HarmonyOS
系统头文件的所在位置。
externalNativeOptions
模块级build-profile.json5
中externalNativeOptions
参数是NDK工程C/C++
文件编译配置的入口,可以通过path
指定CMake脚本路径、arguments
配置CMake
参数、cppFlags
配置C++
编译器参数、abiFilters
配置编译架构等。
"apiType": "stageMode",
"buildOption": {
"arkOptions": {
},
"externalNativeOptions": {
"path": "./src/main/cpp/CMakeLists.txt",
"arguments": "",
"cppFlags": "",
"abiFilters": [
"arm64-v8a",
"armeabi-v7a",
"x86_64"
],
}
}
path
string
CMake
构建脚本地址,即CMakeLists.txt
文件地址。
abiFilters array
本机的ABI
编译环境,包括:
armeabi-v7a
arm64-v8a
x86_64
如不配置该参数,编译时默认编译出arm64-v8a
架构相关so
。
arguments
string
CMake
编译参数。
cppFlags
string
C++
编译器参数。
命令行构建项目
在很多复杂应用工程中,C++
代码工程是通过CMake
等构建系统以命令行方式来编译构建的,接下来介绍如何把已有的CMake
工程切换到工具链中,从而使用命令行CMake
构建该工程。
下载NDK
开发包
从DevEco Studio
的SDK Manager
中下载。
解压NDK开发包
mac
系统下使用 SDK
包解压
tree ohos-sdk
ohos-sdk
├── 20230824113825-L2-SDK-MAC-M1-FULL.tar.gz
└── sdk
└── packages
└── ohos-sdk
└── darwin
├── ets-darwin-arm64-4.0.10.5-Release.zip
├── js-darwin-arm64-4.0.10.5-Release.zip
├── native-darwin-arm64-4.0.10.5-Release.zip
├── previewer-darwin-arm64-4.0.10.5-Release.zip
└── toolchains-darwin-arm64-4.0.10.5-Release.zip
5 directories, 6 files
配置环境变量
配置mac
系统下环境变量
# 在当前用户目录下
# 打开 .bash_profile 文件
# 文件如果不存在,创建即可
vim ~/.bash_profile
# 在文件最后添加 cmake 路径,该路径是自己的放置文件的路径,之后保存退出
export PATH=~/Ndk/mac-sdk-full/sdk/packages/ohos-sdk/darwin/native/build-tools/cmake/bin:$PATH
# 在命令行执行 source ~/.bash_profile 使环境变量生效
source ~/.bash_profile
#在命令行输入which命令查询当前CMake所在路径
which cmake
#结果路径与.bashrc中设置一致
~/ohos-sdk/ohos-sdk/linux/native/build-tools/cmake/bin/cmake
参考
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/build-with-ndk-cmake-0000001774120786