ubuntu CMake NDK 交叉編譯

一、安裝 cmake

不建議使用 apt-get 安裝,因爲版本比較低,如ndk17可能就用不了。

這裏使用 下載 手動安裝

sudo apt-get autoremove cmake
wget https://cmake.org/files/v3.12/cmake-3.12.2-Linux-x86_64.tar.gz
tar zxvf cmake-3.12.2-Linux-x86_64.tar.gz
mv cmake-3.12.2-Linux-x86_64 /usr/cmake-3.12.2
ln -sf /usr/cmake-3.12.2/bin/* /usr/bin/

查看當前 cmake 版本信息:

cmake --version

二、下載 ndk 解壓到指定目錄,設置環境變量

https://developer.android.google.cn/ndk/downloads/

選擇你想到的版本 ndk18 變化很大,有些stl 已經不支持。

# vim /etc/profile
 
export ANDROID_NDK_HOME=/usr/android/android-ndk-r14b
export PATH=$ANDROID_NDK_HOME:$PATH

輸入命令 source /etc/profile,使配置生效

三、CMakeList.txt   使用ndk自帶的工具鏈android.toolchain.cmake

#****************************This is Project Info****************************
PROJECT(mydemo)
CMAKE_MINIMUM_REQUIRED(VERSION 3.5.1)
 
#****************************This is Compile Flag****************************
 if(DEBUG)        
 message( STATUS "==============================debug==============================" )        
 ADD_DEFINITIONS(-g)
 ADD_DEFINITIONS(-D AVX_DEBUG_LEVEL=AVX_DEBUG_DEBUG)
else(DEBUG)   
 message( STATUS "==============================release==============================" )         
 ADD_DEFINITIONS(-O2)
 ADD_DEFINITIONS(-D AVX_DEBUG_LEVEL=AVX_DEBUG_INFO)
 endif()
 
ADD_DEFINITIONS("-Wall")
ADD_DEFINITIONS("-fPIC")
ADD_DEFINITIONS("-Wl,-lm")
ADD_DEFINITIONS("-std=c++11")
SET(CMAKE_CXX_FLAGS "-Wall -fPIC -Wl,-Bsymbolic -lm -D__STDINT_LIMITS -D__STDINT_MACROS -D__ANDROID__ -DANDROID")
 
#****************************This is Include File/Directories****************************
#INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR}/)
INCLUDE_DIRECTORIES(../../libextern/Android/include)
 
#****************************This is Source File/Directories****************************
SET(DIR_SRCS ../test.cpp)
 
#****************************This is Library Directories****************************
LINK_DIRECTORIES(./)
LINK_DIRECTORIES(../libs)
 
#****************************This is 3Party Library****************************
#LINK_LIBRARIES(pthread)
 
#****************************This is Output Directory****************************
 
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/../../../bin/Android)
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/../../../bin/Android)
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/../../../bin/Android)
 
#****************************This is Output Library****************************
ADD_LIBRARY(avxallocate SHARED ${DIR_SRCS} )
TARGET_LINK_LIBRARIES(mydemo)

四 、 shell 腳本 這裏也可以不用,直接用命令行 參數可以自己添加

cmake -DDEBUG=NO -DANDROID_STL=c++_static -DANDROID_NDK=$ANDROID_NDK_HOME  -DANDROID_ABI=armeabi-v7a -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake 

 

NDK_Build.sh

 

#!/bin/bash
rm -rf CMakeCache.txt
rm -rf CMakeFiles
rm -rf cmake_install.cmake
rm -rf Makefile
rm -rf CTestTestfile.cmake
 
if [[ “$@“ =~ "-d" ]];then
        echo "----------------------------cmake debug----------------------------"
cmake -DDEBUG=ON -DCMAKE_TOOLCHAIN_FILE=/home/aa/ndk/bulid/cmake/android.toolchain.cmake \
      -DANDROID_NDK=$ANDROID_NDK_HOME                \                  \
      -DANDROID_ABI="armeabi-v7a"          \
	  -DANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-4.9\
	  -DANDROID_NATIVE_API_LEVEL=21\
	  -DANDROID_STL=c++_static\     
	  .
else      
        echo "----------------------------cmake release----------------------------"
cmake -DDEBUG=NO -DCMAKE_TOOLCHAIN_FILE=/home/aa/ndk/bulid/cmake/android.toolchain.cmake \
      -DANDROID_NDK=$ANDROID_NDK_HOME                \                   \
      -DANDROID_ABI="armeabi-v7a"          \
	  -DANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-4.9\
	  -DANDROID_NATIVE_API_LEVEL=21\
	  -DANDROID_STL=c++_static\
      .	  
fi
	  
make 
 
rm -rf CMakeCache.txt
rm -rf CMakeFiles
rm -rf cmake_install.cmake
rm -rf Makefile
rm -rf CTestTestfile.cmake

將CMakeList.txt 和Shell腳本放在同一目錄下,賦予NDK_Build.sh腳本執行權限,,執行./NDK_Build.sh命令;

如果是從windows 上拿過來的,還需要轉換格式 vi NDK_Build.sh set ff=unix


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章