编译脚本里定义的变量啥意思,怎么发挥作用的

export PATH=$PATH:/opt/toolchains/aarch64--glibc--stable-2020.08-1/bin
export TARGET_ARCH=aarch64
export TARGET_TRIPLE=aarch64-linux
export CROSS_COMPILE=$TARGET_TRIPLE-
export CC=$TARGET_TRIPLE-gcc
export CXX=$TARGET_TRIPLE-g++
export AS=$TARGET_TRIPLE-as
export LD="$TARGET_TRIPLE-ld  --sysroot=$SDKTARGETSYSROOT"
export GDB=$TARGET_TRIPLE-gdb
export STRIP=$TARGET_TRIPLE-strip
export RANLIB=$TARGET_TRIPLE-ranlib
export OBJCOPY=$TARGET_TRIPLE-objcopy
export OBJDUMP=$TARGET_TRIPLE-objdump
export READELF=$TARGET_TRIPLE-readelf
export AR=$TARGET_TRIPLE-ar
export NM=$TARGET_TRIPLE-nm
export M4=m4
export ROS_DISTRO=galactic

 

 

以下是 全面总结 在使用 CMake 编译时涉及的 通用约定变量,涵盖环境变量与 CMake 内置变量,并明确其用途和分类:


一、核心工具链变量

1. 环境变量(由 Shell 设置,CMake 自动读取)

变量名用途对应 CMake 变量示例值
CC 指定 C 编译器路径 CMAKE_C_COMPILER export CC=clang
CXX 指定 C++ 编译器路径 CMAKE_CXX_COMPILER export CXX=clang++
AR 静态库归档工具(ar CMAKE_AR export AR=llvm-ar
AS 汇编器(as CMAKE_ASM_COMPILER export AS=llvm-as
LD 链接器(ld 或 lld CMAKE_LINKER export LD=ld.lld
NM 符号表查看工具(nm CMAKE_NM export NM=llvm-nm
RANLIB 静态库索引工具(ranlib CMAKE_RANLIB export RANLIB=llvm-ranlib
STRIP 去除二进制符号工具(strip CMAKE_STRIP export STRIP=llvm-strip
OBJCOPY 目标文件复制工具(objcopy CMAKE_OBJCOPY export OBJCOPY=llvm-objcopy
OBJDUMP 反汇编工具(objdump CMAKE_OBJDUMP export OBJDUMP=llvm-objdump
READELF ELF 文件分析工具(readelf 无直接对应,需手动配置 export READELF=readelf

二、交叉编译变量

1. 环境变量

变量名用途示例值
CROSS_COMPILE 工具链前缀(自动推导 ARCC 等路径) export CROSS_COMPILE=aarch64-linux-
TARGET_ARCH 目标架构(如 armaarch64 export TARGET_ARCH=aarch64
TARGET_TRIPLE 目标三元组(如 aarch64-linux-gnu export TARGET_TRIPLE=aarch64-linux

2. CMake 变量

变量名用途示例值
CMAKE_SYSTEM_NAME 目标操作系统(LinuxAndroid 等) -DCMAKE_SYSTEM_NAME=Linux
CMAKE_SYSROOT 目标系统根目录(sysroot) -DCMAKE_SYSROOT=/opt/sysroot
CMAKE_C_COMPILER_TARGET 指定编译器目标三元组 -DCMAKE_C_COMPILER_TARGET=aarch64-linux-gnu

三、构建选项变量

1. 环境变量

变量名用途示例值
CFLAGS C 编译选项 export CFLAGS="-O2 -Wall"
CXXFLAGS C++ 编译选项 export CXXFLAGS="-std=c++17"
LDFLAGS 链接选项 export LDFLAGS="-L/opt/lib -Wl,-rpath"
CPPFLAGS 预处理器选项(头文件路径等) export CPPFLAGS="-I/opt/include"

2. CMake 变量

变量名用途示例值
CMAKE_BUILD_TYPE 构建类型(Debug/Release -DCMAKE_BUILD_TYPE=Debug
CMAKE_CXX_STANDARD C++ 标准版本(如 1117 -DCMAKE_CXX_STANDARD=17
CMAKE_EXPORT_COMPILE_COMMANDS 生成编译数据库(用于工具集成) -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

四、安装与路径控制

变量名用途示例值
CMAKE_INSTALL_PREFIX 安装目录前缀 -DCMAKE_INSTALL_PREFIX=/opt/myapp
CMAKE_PREFIX_PATH 依赖库搜索路径(分号分隔) -DCMAKE_PREFIX_PATH="/opt/qt5;/opt/boost"
DESTDIR 分阶段安装目录(覆盖实际安装路径) export DESTDIR=/tmp/stage

五、工具链工具示例

1. 使用 CROSS_COMPILE 自动推导工具链

export CROSS_COMPILE=aarch64-linux-
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export AR=${CROSS_COMPILE}ar
export LD=${CROSS_COMPILE}ld
export NM=${CROSS_COMPILE}nm
 

2. CMake 显式指定工具链

set(CMAKE_C_COMPILER aarch64-linux-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-g++)
set(CMAKE_AR aarch64-linux-ar)
set(CMAKE_NM aarch64-linux-nm)
 

六、特殊用途变量

变量名用途示例值
PKG_CONFIG_PATH 指定 pkg-config 搜索路径 export PKG_CONFIG_PATH=/opt/lib/pkgconfig
ROS_DISTRO ROS 发行版标识(如 humblegalactic export ROS_DISTRO=galactic
SDKTARGETSYSROOT 自定义 sysroot 路径(非标准变量) export SDKTARGETSYSROOT=/opt/sdk

七、总结

核心要点

  1. 工具链变量:CCCXXARNMLD 等是 环境变量,CMake 会将其转换为对应的 CMAKE_* 内置变量。
  2. 交叉编译:通过 CROSS_COMPILE 或 CMAKE_SYSROOT 定义目标平台环境。
  3. 构建控制:CMAKE_BUILD_TYPE 和 CMAKE_CXX_STANDARD 控制优化和语言标准。
  4. 路径管理:CMAKE_INSTALL_PREFIX 和 CMAKE_PREFIX_PATH 管理依赖和安装路径。

注意事项

  • 优先级:CMake 命令行参数(-D) > 环境变量 > CMake 默认值。
  • 清除缓存:修改编译器或工具链后,需删除 CMakeCache.txt 或使用 --fresh(CMake 3.24+)。

通过合理配置这些变量,可以覆盖从本地开发到嵌入式交叉编译的全场景需求。

posted @   墨尔基阿德斯  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
历史上的今天:
2023-02-12 交叉编译 configure
点击右上角即可分享
微信分享提示