今天来说一说Napi的编译,按照官方给出的示例,用IDE创建Native C++工程,该napi_init.cpp文件即可。确实,这样是没有问题的。但如果我想写一个动态库,提供给其它工程来用呢?熟悉IDE的会说,去build目录里复制出来就行了。没错,可以这样,但个人很不喜欢,so文件在build目录里真的太深了,不只目录深,隐藏的也深。
仔细观察编译生成的路径,在.cxx目录下,有一个metadata_generation_command.txt文件,打开文件,内容如图
可以看到,cmake编译时的命令就在这个文件里,这样就好办了,自己写一个批处理,已有动态库编译成鸿蒙版本就可以和其它CPU架构一样了。非napi项目也可以通用。
首先,cmake和native路径都在SDK的安装目录,所以,先配置环境变量,如图:
上图为windows下的配置方式,linux可以通过去改.bashrc文件,来追加环境变量,这里不细说了。
最后,整理编译脚本如下
@echo off
REM 设置命令窗口显示文字为UTF8编码
CHCP 65001
set OHOS_ABI=%1
set BUILD_PATH="build-ohos-%OHOS_ABI%"
if exist %BUILD_PATH% rmdir /Q /S %BUILD_PATH%
mkdir %BUILD_PATH%
REM cd %BUILD_PATH%
set OHOS_SDK=Y:\OpenHarmony\Sdk\10
set NINJA_MAKE=%OHOS_SDK%\native\build-tools\cmake\bin\ninja.exe
set BUILD_TYPE=Release
%OHOS_SDK%\native\build-tools\cmake\bin\cmake.exe -B%BUILD_PATH% -DOHOS_ARCH=%OHOS_ABI% -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=out -DCMAKE_BUILD_TYPE=%BUILD_TYPE% -DOHOS_SDK_NATIVE=%OHOS_SDK%\native -DCMAKE_SYSTEM_NAME=OHOS -DCMAKE_OHOS_ARCH_ABI=%OHOS_ABI% -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_TOOLCHAIN_FILE=%OHOS_SDK%\native\build\cmake\ohos.toolchain.cmake -GNinja -DCMAKE_MAKE_PROGRAM=%NINJA_MAKE% --no-warn-unused-cli
cd %BUILD_PATH%
%NINJA_MAKE%
pause
复制
上面脚本默认Cmakelist.txt和bat文件在同一目录,如果不在同一目录可以自行修改Cmakelist.txt的位置,具体方法可以查看cmake的帮助。
执行脚本如下
@echo off
REM 设置命令窗口显示文字为UTF8编码
CHCP 65001
start /min cmd /c build-ohos-release.bat armeabi-v7a
start /min cmd /c build-ohos-release.bat arm64-v8a
start /min cmd /c build-ohos-release.bat x86_64
复制
鸿蒙只支持上面三种架构,可以根据需要注释掉不需要的架构,双击后脚本启动多个线程同步编译。ninja编译时,也可以和make一样,加上-j选项进行多线程编译。
Linux的shell脚本可以参考类似的方法来写,这里就不提供示例了。
至于Cmakelist.txt的编写,这里就不详细介绍了,其实并不难,而且大多数人也是会的。
今天的内容就到这里吧。