CMake NDK 交叉编译

CMake

CMake 首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。

其编译流程为:
1、编写 CMakeList.txt 
2、执行 cmake path 生成 Makefile,path 为包含 CMakeList.txt 的路径
3、使用 make 进行编译

CMakeLists.txt 的语法比较简单,由命令、注释和空格组成,其中命令不区分大小写。符号 # 后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。

常见的命令如下:

# CMake 最低版本号要求

cmake_minimum_required (VERSION 2.8)

# 项目信息

project (Test)

# 将指定目录中的所有源文件保存到变量中

aux_source_directory(. DIR_SRC)

# 添加子目录 math,该目录下的 CMakeLists.txt 文件和源代码也会被处理
add_subdirectory(math)

# 指定生成目标

add_executable(Test ${DIR_SRC})

# 添加链接库

target_link_libraries(Test MathFunctions)


# math 目录下的 CMakeLists.txt
# 将指定目录中的所有源文件保存到变量中

aux_source_directory(. DIR_LIB_SRC)

# 生成静态链接库

add_library(MathFunctions ${DIR_LIB_SRC})


交叉编译

交叉编译是 CMake 从 2.6.0 版本开始支持的。意为在 host 宿主机上生成 target 目标机的程序。编译过程中涉及头文件切换和编译器的选择等等。

须知:
CMake 不能自动判断目标系统,需要指定
一般情况下 build 出来的可执行文件不能直接运行在宿主机上。
编译过程中不能用宿主机上的原生头文件和库,而是用一套不同的头文件和库。

以上提到的一些变量会放到一个 cmake 脚本文件中,然后通过 CMAKE_TOOLCHIAIN_FILE 传递给 CMake,这也是 CMake 专门为交叉编译预留的很好用的一个变量,里面设置了一系列需要改变的变量和属性。 为了不让用户每次交叉编译重新输入这些变量,才引入了该 toolchain 机制,其实就是一个 cmake 脚本。

cmake -D CMAKE_TOOLCHIAIN_FILE="/ndk/build/cmake/android.toolchain.cmake"

android.toolchain.cmake 中的一些变量:

CMAKE_SYSTEM_NAME    目标机的 OS 名称,如 LIinux,Android,Generic

CMAKE_SYSTEM_PROCESSOR    CPU 型号,例如:ARM,X86

CMAKE_C_COMPILER    C 语言编译器

CMAKE_CXX_COMPILER    C++编译器

CMAKE_FIND_ROOT_PATH    搜索查找外部依赖的根路径

CMAKE_FIND_ROOT_PATH_MODE_PROGRAM    对 FIND_PROGRAM 起作用,NEVER,ONLY,BOTH

CMAKE_FIND_ROOT_PATH_MODE_LIBRARY    对 FIND_LIBRARY 起作用




你可能感兴趣的:(Android,开发,cmake)