cmake交叉编译
前置条件:linux系统已经安装cmake工具,unbuntu下安装方法sudo apt install cmake
,已下载好交叉编译工具链
x86平台的编译方法
camke <dir> #CMakeLists.txt所在目录
make -j8
其他平台
先设置PATH变量,增加交叉编译工具目录。
在本项目目录新建一个toolchain.cmake
文件,增加如下代码,然后在CMakeLists.txt
中include(toolchain.cmake)
,当然,也可以直接写在CMakeLists.txt
中
set(CMAKE_SYSTEM_NAME Linux) #一定要加
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc-5)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++-5)
set(CMAKE_SYSROOT /home/huanglidi/work/tool/CrossSysroot/16.04)
set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${CMAKE_SYSROOT}/opt/bros ${CMAKE_SYSROOT}/opt/cyber)
set(CMAKE_LIBRARY_PATH ${CMAKE_SYSROOT}/usr/local/lib ${CMAKE_SYSROOT}/usr/lib/aarch64-linux-gnu ${CMAKE_SYSROOT}/usr/lib)
set(CMAKE_INCLUDE_PATH ${CMAKE_SYSROOT}/usr/local/include ${CMAKE_SYSROOT}/usr/include/aarch64-linux-gnu ${CMAKE_SYSROOT}/usr/include)
变量解释:
set(CMAKE_SYSTEM_NAME Linux)
:该指令必须存在,其目的是设置目标机使用的操作系统名称,支持Linux
,QNX
,WindowsCE
,Android
等。如果没有操作系统,那么就写 Generic
。执行该指令后,cmake
变量——CMAKE_CROSSCOMPILING 会自动被设置为 TRUE
,此时 cmake
就会“知道“现在执行的是交叉编译;
由于 cmake
无法自动获取目标机器信息,因此需要显式指明编译工具。
CMAKE_C_COMPILER
:设置 C 编译器;如果没有设置PATH环境变量,先设置PATH变量
CMAKE_CXX_COMPILER
:设置 c++ 编译器
注意:因为编译生成程序时,不单单需要编译器,还需要链接器等其他工具,所以要将交叉编译工具所在目录设置到PATH,才能保证生成成功!!
编译命令
mkdir build
cd build
cmake ../
make -j8