CMake 构建NDK项目

  • Post author:
  • Post category:其他


1、编写脚本

#!/bin/bash -x

rm -rf build
rm -rf lib
set -e

ARM_ABI="armeabi-v7a"

ENTER_DIR="$(cd "$(dirname "$0")";pwd)"

ANDROID_NDK=NDK路径

ANDROID_AR=${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-ar

mkdir -p $ENTER_DIR/build/
mkdir -p $ENTER_DIR/build/$ARM_ABI
pushd $ENTER_DIR/build/$ARM_ABI

cmake \
    -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
    -DANDROID_ABI=$ARM_ABI \
    -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
    -DANDROID_ARM_NEON=ON \
    -DANDROID_PLATFORM=android-19 \
    -DANDROID_STL=c++_static \
    -DCMAKE_BUILD_TYPE=Release ../.. && \
    make -j16

popd

$ANDROID_AR -rsc libmade.a $(find $ENTER_DIR/build/$ARM_ABI -name "*.o")


mkdir lib
mkdir lib/$ARM_ABI
mv libmade.a lib/$ARM_ABI

2、编写CMakeLists.txt文件

cmake_minimum_required(VERSION 3.6)
project("NAME")

set(CMAKE_CXX_STANDARD 14)

find_library(OPENGLES2_LIBRARY GLESv2)

IF (UNIX)
    message("unix")
    IF (NOT DEFINED TARGET_PLATFORM)
        set(TARGET LINUX)
        add_definitions(-DLINUX)
    ELSEIF (${TARGET_PLATFORM} STREQUAL ANDROID)
        message("android")
        set(TARGET ANDROID)
        add_definitions(-DANDROID)
    ENDIF ()
ENDIF (UNIX)

set(ANDROID_SYSROOT "Android_NDK路径/sysroot")

set(SYS_IN ${ANDROID_SYSROOT}/usr/include)

include_directories(${SYS_IN})

add_library(${PROJECT_NAME} src/main.cpp)

target_link_libraries(${PROJECT_NAME})

3、编写c/c++文件

#ifdef ANDROID
#include <GLES2/gl2.h>
#endif

4、可能存在问题

在CLion或者VSCode中可能遇到引用头文件错误的问题,比如头文件有红色下划线,提示找不到文件等。但是运行脚本构建确实正常的。

问题分析:

以上步骤是基于脚本构建,构建的过程中指定了运行的工具链和相关环境,而在第三方编辑器中有自己的运行默认工具链和环境,只需要合理配置即可。

例如在Clion中

1、设置-Build,Execution,Deployment-Toolchains中:

新增一个NDK的配置,并选在Make、C Compiler 、C++Compiler使用NDK提供的工具

NDK/prebuilt/darwin-x86_64/bin/make

NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang

NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++

2、设置Build,Execution,Deployment-CMake中:

新增一个Android的配置,在Toolchain中选择刚刚配置的的NDK



版权声明:本文为hongye_main原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。