[What]cmake_工具链配置

cmake根据 CMakeLists.txt 文件中的语言设定或根据当前系统设定一个默认的编译工具链, 一般在host上编译使用默认配置即可,但对于交叉编译则需要指定工具链。

语言设定

语言的设定通过 project() 命令来设定(比如: project(libiio c) ),这会决定内建变量的取值。

  • 如果没有设置,则默认的语言是 c/c++ .
    • 可以打印 ENABLED_LANGUAGES 变量的值来查看当前设定的语言
  • 也可以先使用 project(MyProject NONE) 不使用语言,然后在后面跟上 enable_language() 来使能对应语言
    • Why?
  • 根据语言设定的不同,对应下面的变量就会不一样:
    • CMAKE_<LANG>_COMPILER : 编译器的路径
    • CMAKE_<LANG>_COMPILER_ID : CMake中对此编译器的ID
    • CMAKE_<LANG>_COMPILER_VERSION : 编译器版本
    • CMAKE_<LANG>_FLAGS : 编译选项

交叉编译

在启动cmake时,需要为其设定变量 :

#指定编译器设定文件的位置
cmake -DCMAKE_TOOLCHAIN_FILE=path/to/file

于此同时,变量 CMAKE_CROSSCOMPILING 的值为 true 代表此时正在交叉编译。

Linux下交叉编译文件编写

//file :tool.cmake
# 目标平台系统
set(CMAKE_SYSTEM_NAME Linux)
# 目标平台架构
set(CMAKE_SYSTEM_PROCESSOR arm)

# 暂不理解,可选
set(CMAKE_SYSROOT /home/devel/rasp-pi-rootfs)
# 设定安装在主机的哪个路径,可选
set(CMAKE_STAGING_PREFIX /home/devel/stage)

# 指定具体的路径及编译器
set(tools /home/devel/gcc-4.7-linaro-rpi-gnueabihf)
set(CMAKE_C_COMPILER ${tools}/bin/arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER ${tools}/bin/arm-linux-gnueabihf-g++)

# 设定检查规则
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
Last Updated 2018-10-14 日 19:32.
Render by hexo-renderer-org with Emacs 26.1 (Org mode 9.1.14)