如何利用cmake移植程序到Android

原链接:https://community.bwbot.org/topic/681
开发测试平台:小强机器人

很多c++和c程序都使用cmake去管理程序依赖和编译程序。新版本的cmake已经支持 cross compile 程序到android平台。我们可以利用ndk和cmake很方便的移植程序。下面是一个移植的例子。

安装clang

因为新版本的ndk已经默认使用clang进行编译了

安装方式参照这里

安装新版本的cmake(>3.14)

wget -q https://github.com/Kitware/CMake/releases/download/v3.14.0-rc4/cmake-3.14.0-rc4.tar.gz
tar -xzf cmake-3.14.0-rc4.tar.gz
cd cmake-3.14.0-rc4/
env CC=$(which clang) CXX=$(which clang++) ./bootstrap --prefix=/usr --parallel=4
make
sudo make install

下载NDK

cd ..
wget -q https://dl.google.com/android/repository/android-ndk-r18b-linux-x86_64.zip
unzip -qq android-ndk-r18b-linux-x86_64.zip
export NDK_ROOT=$(pwd)/android-ndk-r18b

创建toolchain文件

toolchain文件是cmake用来设置编译工具链的文件。配置好此文件就可以让cmake cross compile android 程序了。

toolchain.cmake文件内容如下

# 设置编译Android
set(CMAKE_SYSTEM_NAME Android)
# 设置Android NDK 路径
set(CMAKE_ANDROID_NDK $ENV{NDK_ROOT})
# 设置 Android ABI
set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a)
# 设置target api版本
set(CMAKE_SYSTEM_VERSION 19)
# 设置cmake寻找路径,自己随便创建一个文件夹, 依赖的相关库文件也要放在这里
set(CMAKE_FIND_ROOT_PATH /opt/arm)

# 设置cmake搜寻文件的方式,防止使用系统中的其他不相干文件
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

编译自己的程序

和正常编译方式差别不大,只要加上toolchain参数就可以了

mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=$TOOLCHAIN_ROOT/toolchain.cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX  ..

TOOLCHAIN_ROOT是你的toolchain文件路径, INSTALL_PREFIX是之前设置的CMAKE_FIND_ROOT_PATH。这样就可以cross compile Android程序了。

猜你喜欢

转载自blog.csdn.net/bluewhalerobot/article/details/88893740