既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
一般情况下,对于GCC来说,只需要使用命令行工具gcc或者g++就可以完成大部分工作,很多步骤都是被封装好的,套件内的不同工具会被适时地自动调用。
在CMake中,也是类似的概念,这些编译构建工具统称为工具链(toolchain),工具链基于不同的语言有不同配置,一般情况下,CMake会根据宿主机自动选择应该使用的工具链。
在进行交叉编译时,需要显式指定一个工具链文件,指明要使用的编译器、编译器的配置选项以及其他必要工具的路径。
1 工具链文件
**工具链文件(toolchain file)**习惯上一般以.toolchain.cmake结尾。工具链文件的编写并不复杂,一般只需要指定以下这些CMake内置变量:
- CMAKE_SYSTEM_NAME:表明目标系统名称,比如
Linux、QNX、Android等;如果目标平台并没有系统,则应该指定为Generic;默认值为CMAKE_HOST_SYSTEM_NAME; - CMAKE_SYSTEM_PROCESSOR:表明目标平台架构,比如最常见的
arm; - CMAKE__COMPILER:表明特定语言的要采用的编译器,需要使用完整路径,一般需要设置
C语言编译器变量CMAKE_C_COMPILER和C++编译器变量CMAKE_CXX_COMPILER; - CMAKE__FLAGS:设置特定编译器对应的编译选项,也可以使用
add_compile_options为所有编译器设置相同的一些编译选项。
还有一些是可选的参数,根据目标平台的不同按需设置即可,大多数时候,cmake执行的时候会报错提示的~
下面是一个使用arm-none-eabi-gcc编译器的工具链文件示例:
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(TOOLS /home/farmer/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux)
set(CMAKE_C_COMPILER "${TOOLS}/bin/arm-none-eabi-gcc")
set(CMAKE_CXX_COMPILER "${TOOLS}/bin/arm-none-eabi-g++")
set(CMAKE_AR "${TOOLS}/bin/arm-none-eabi-gcc-ar")
add_compile_options(-mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -g -Os -MMD -MP -Wall)
对于编译选项,需要结合项目实际开发情况。对于arm平台,比较重要的几个选项包括:
-mcpu-mfpu-mfloat-abi
其他更多参数可以在GCC官网或者对应编译器官方查看。
这里是假定知道了arm-none-eabi-gcc所在路径,对于团队协作可能并不是很友好,写死的路径在不同开发者的机器上可能不一样。当然,对于编译都只在服务器进行的情况就没有关系了。
如果开发者将编译套件对应可执行文件目录添加到系统环境变量,那么也可以直接设置对应的编译器可执行文件名称,比如:
set(CMAKE_C_COMPILER "arm-none-eabi-gcc")
set(CMAKE_CXX_COMPILER "arm-none-eabi-g++")
也可以通过find_program在系统路径下查找及指定的路径下查找对应的编译器可执行文件,再进行设置:
find_program(C_COMPILER "arm-none-eabi-gcc" ${SEARCH_PATHS})
find_program(CXX_COMPILER "arm-none-eabi-g++" ${SEARCH_PATHS})
set(CMAKE_C_COMPILER ${C_COMPILER})
set(CMAKE_CXX_COMPILER ${CXX_COMPILER})
二 CMake交叉编译
在需要进行交叉编译的时候,先编写一个适用于目标平台的工具链文件,然后在执行cmake命令开始构建时,可以使用参数--toolchain或者-DCMAKE_TOOLCHAIN_FILE=指定工具链文件的路径即可:
cmake ... --toolchain <path/to/toolchain-file>


**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://gitee.com/vip204888)**