<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[如何利用cmake移植程序到Android]]></title><description><![CDATA[<p dir="auto">很多c++和c程序都使用cmake去管理程序依赖和编译程序。新版本的cmake已经支持 cross compile 程序到android平台。我们可以利用ndk和cmake很方便的移植程序。下面是一个移植的例子。</p>
<h3>安装clang</h3>
<p dir="auto">因为新版本的ndk已经默认使用clang进行编译了</p>
<p dir="auto">安装方式参照<a href="http://apt.llvm.org/" target="_blank" rel="noopener noreferrer">这里</a></p>
<h3>安装新版本的cmake(&gt;3.14)</h3>
<pre><code class="language-bash">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
</code></pre>
<h3>下载NDK</h3>
<pre><code class="language-bash">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
</code></pre>
<h3>创建toolchain文件</h3>
<p dir="auto">toolchain文件是cmake用来设置编译工具链的文件。配置好此文件就可以让cmake cross compile android 程序了。</p>
<p dir="auto">toolchain.cmake文件内容如下</p>
<pre><code class="language-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)
</code></pre>
<h3>编译自己的程序</h3>
<p dir="auto">和正常编译方式差别不大，只要加上toolchain参数就可以了</p>
<pre><code class="language-bash">mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=$TOOLCHAIN_ROOT/toolchain.cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX  ..
</code></pre>
<p dir="auto">TOOLCHAIN_ROOT是你的toolchain文件路径， INSTALL_PREFIX是之前设置的CMAKE_FIND_ROOT_PATH。这样就可以cross compile Android程序了。</p>
]]></description><link>http://community.bwbot.org/topic/681/如何利用cmake移植程序到android</link><generator>RSS for Node</generator><lastBuildDate>Fri, 06 Mar 2026 05:57:32 GMT</lastBuildDate><atom:link href="http://community.bwbot.org/topic/681.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Mar 2019 02:31:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 如何利用cmake移植程序到Android on Sat, 29 May 2021 00:52:29 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="http://community.bwbot.org/uid/1344">@shaokangfeng</a> 我没用过android.bp，我的是直接cmake在android studio外编译的。</p>
]]></description><link>http://community.bwbot.org/post/16633</link><guid isPermaLink="true">http://community.bwbot.org/post/16633</guid><dc:creator><![CDATA[weijiz]]></dc:creator><pubDate>Sat, 29 May 2021 00:52:29 GMT</pubDate></item><item><title><![CDATA[Reply to 如何利用cmake移植程序到Android on Fri, 28 May 2021 12:57:46 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="http://community.bwbot.org/uid/7">@weijiz</a> 你好，我想请教下一个问题。现在我有一个Android 10.0的源码工程，想移植采用cmake编译的项目到这个工程上，Android.bp文件要怎么写才能运行cmake命令？</p>
]]></description><link>http://community.bwbot.org/post/16632</link><guid isPermaLink="true">http://community.bwbot.org/post/16632</guid><dc:creator><![CDATA[shaokangfeng]]></dc:creator><pubDate>Fri, 28 May 2021 12:57:46 GMT</pubDate></item></channel></rss>