平时c/c++项目代码移植到android平台时,一般是建一个android项目,再把c/c++项目的代码拷贝到android项目相应的目录,配置后进行编译,这里android项目是使用cmake进行编译的.
这里要说的是直接在c/c++项目中进行编译android的库,配置如下:
1.在项目中创建CMakeLists.txt文件
2.编写CMakeLists.txt如下:
cmake_minimum_required(VERSION 3.4.1)
add_library(
native-test
SHARED
Test.c)
target_link_libraries(
native-test)
ADD_EXECUTABLE(Test Test.c)
3.在上图build目录下保存编写的编译脚本cmake-build.sh
#!/bin/bash
rm -rf CMakeCache.txt
rm -rf CMakeFiles
rm -rf cmake_install.cmake
rm -rf Makefile
rm -rf CTestTestfile.cmake
export NDK_HOME=/mnt/MyData/Android/android-ndk-r16b
#export OUTPUT_PREFIX=$(pwd)/output
export PATH=/home/xhp/Android/Sdk/cmake/3.6.4111459/bin:$PATH
if [[ “$@“ =~ "-d" ]];then
echo "----------------------------cmake debug----------------------------"
cmake -DDEBUG=ON -DCMAKE_TOOLCHAIN_FILE=$NDK_HOME/build/cmake/android.toolchain.cmake \
-DANDROID_NDK=$NDK_HOME \
-DANDROID_ABI=armeabi \
-DANDROID_TOOLCHAIN_NAME=clang \
-DANDROID_NATIVE_API_LEVEL=19 \
-DANDROID_STL=gnustl_static \
../
else
echo "----------------------------cmake release----------------------------"
cmake -DDEBUG=NO -DCMAKE_TOOLCHAIN_FILE=$NDK_HOME/build/cmake/android.toolchain.cmake \
-DANDROID_NDK=$NDK_HOME \
-DANDROID_ABI=armeabi \
-DANDROID_TOOLCHAIN_NAME=clang \
-DANDROID_NATIVE_API_LEVEL=19 \
-DANDROID_STL=gnustl_static \
../
fi
make -j4
给cmake-build.sh赋予可执行权限chmod a+x cmake-build.sh
执行脚本进行编译,得到:
生成了libnative-test.so 库 和 Test 可执行程序,在把libnative-test.so拷贝到你的android工程中使用
到这里编译就完成了,留给大家一个思考:如何将编译生成的so库和可执行程序进行保存到指定目录,相应的头文件也进行保存到指定目录?
源码见https://github.com/BeckYoung/androidFirstCmake