在没有 Android-Studio 的情况下构建 CMake 库(通过命令行或 GUI) [英] Build CMake library without Android-Studio (by command-line or GUI)

查看:57
本文介绍了在没有 Android-Studio 的情况下构建 CMake 库(通过命令行或 GUI)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

看来,Android-Studio 设置了特定的 CMake 选项,无论我尝试什么,我都无法使用命令行(Android-Studio 之外)进行构建!!

有没有什么方法可以在不打开 Android-Studio 的情况下构建 Android 项目的 CMake 库?

<块引用>

注意:我已经找到了解决方案,很快就会分享答案.

解决方案

是的,需要设置一些选项和/或变量才能使 CMake 命令行构建工作(甚至无需打开 Android-Studio).

1.首先,创建my-toolchain.cmake文件(在你的项目旁边,可能在config目录中),内容如下:

<预><代码>## 允许在 Android-Studio 之外编译.#设置(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)设置(CMAKE_TOOLCHAIN_DIRECTORY$ENV{ANDROID_HOME}/ndk-bundle/build/cmake")如果(不是 CMAKE_TOOLCHAIN_FILE)如果(不是 ANDROID_ABI)# 默认为 32 位 ARMv7 CPU.设置(ANDROID_ABIarmeabi-v7a")万一()如果(不是 ANDROID_PLATFORM)设置(ANDROID_PLATFORMandroid-15")万一()设置(CMAKE_TOOLCHAIN_FILE${CMAKE_TOOLCHAIN_DIRECTORY}/android.toolchain.cmake")万一()if(WIN32 AND NOT CMAKE_MAKE_PROGRAM)设置(CMAKE_MAKE_PROGRAM"$ENV{ANDROID_HOME}/ndk-bundle/prebuilt/windows/bin/make.exe"缓存内部""强制)万一()

2.其次,将上一步创建的文件添加到你的项目中,例如:

cmake_minimum_required(VERSION 3.2)# 检测工具链.包括(配置/我的工具链.cmake)项目(MyProject C CXX)# ... 等等 ...

3.最后,在你的 CMakeLists.txt 文件所在的控制台 cd 中,并使用如下命令构建:

cmake -H.-B .build -G "Unix Makefiles";-DCMAKE_BUILD_TYPE=发布 -DANDROID_PLATFORM=android-14 -D ANDROID_ABI=armeabi-v7a光盘 .build%ANDROID_HOME%\ndk-bundle\prebuilt\windows\bin\make.exe"install INSTALL_ROOT=%CD%\.build";

<块引用>

注意第 3 步的最后一个命令会根据您的操作系统而变化,但如果您有 ANDROID_HOME,上面的命令应该适用于 Windows环境变量设置为 Android-SDK 根目录(当然需要在 ndk-bundle 子目录中提取 NDK).

大功告成!
只需对每个 CPU 架构重复步骤 3,即将 ANDROID_ABI 更改为可能的选项之一:
armeabi-v7aarm64-v8ax86x86_64mips、<代码>mips64

虽然,mipsmips64 现在已被弃用(Android NDK r16b 是支持它们的最新版本).

It seems, Android-Studio sets specific CMake options, And I can not build with command-line (outside of Android-Studio) no matter what I tried!!

Is there any way to build an Android project's CMake library without even opening Android-Studio?

Note: I already found solution and will share answer to this shortly.

解决方案

Yes there were some options and/or variables that need to be set for CMake command-line build to work (without even opening Android-Studio).

1. Firstly, create the my-toolchain.cmake file (beside your project, maybe in config dir), with content below:

#
# Allows compiling outside of Android-Studio.
#

set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)

set(CMAKE_TOOLCHAIN_DIRECTORY "$ENV{ANDROID_HOME}/ndk-bundle/build/cmake")
if(NOT CMAKE_TOOLCHAIN_FILE)
  if(NOT ANDROID_ABI)
    # Default to 32 Bit ARMv7 CPU.
    set(ANDROID_ABI "armeabi-v7a")
  endif()
  if(NOT ANDROID_PLATFORM)
    set(ANDROID_PLATFORM "android-15")
  endif()
  set(CMAKE_TOOLCHAIN_FILE "${CMAKE_TOOLCHAIN_DIRECTORY}/android.toolchain.cmake")
endif()

if(WIN32 AND NOT CMAKE_MAKE_PROGRAM)
  set(CMAKE_MAKE_PROGRAM "$ENV{ANDROID_HOME}/ndk-bundle/prebuilt/windows/bin/make.exe" CACHE INTERNAL "" FORCE)
endif()

2. Secondly, Add the file created in last step into your project, for example:

cmake_minimum_required(VERSION 3.2)

# Detect toolchain.
include(config/my-toolchain.cmake)

project(MyProject C CXX)

# ... and so on ...

3. Finally, in console cd where your CMakeLists.txt file is, and build with commands like:

cmake -H. -B .build -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DANDROID_PLATFORM=android-14 -D ANDROID_ABI=armeabi-v7a

cd .build

"%ANDROID_HOME%\ndk-bundle\prebuilt\windows\bin\make.exe" install INSTALL_ROOT="%CD%\.build"

Note that last command of Step-3 changes based on your operating-system, but above should work for Windows if you have ANDROID_HOME environment-variable set to Android-SDK root directory (which of course, needs NDK extracted in ndk-bundle sub-dir).

All done!
Just repeat Step-3 for each CPU architecture, i.e. change ANDROID_ABI to one of possible options:
armeabi-v7a, arm64-v8a, x86, x86_64, mips, mips64

Although, mips and mips64 are deprecated by now (and Android NDK r16b was last version supporting them).

这篇关于在没有 Android-Studio 的情况下构建 CMake 库(通过命令行或 GUI)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆