尧图精选

Makefile中的核心变量介绍

🕒 发布时间:2026/9/12 20:14:11 📁 来源:尧图网络
0 Preface/Foreword1 常用核心变量介绍1.1 TOPDIR在Makefile工程特别是层级化或大型项目如Linux内容中TOPDIR通常是一个自定义变量用于表示项目顶层目录的绝对路径或相对路径。1.1.1 TOPDIR的作用TOPDIR主要作用是解决子目录makefile中引用顶层资源如公共头文件、全局库、顶层配置文件时的路径问题确保无论当前make命令在哪个子目录下执行都能正确找到顶层的资源。1.1.2 注意事项空格问题使用$(shell pwd)时确保路径中没有空格或者在引用时使用引号在make变量中处理空格比较复杂建议工程路径避免使用空格循环依赖不能在定义TOPDIR时引用依赖于TOPDIR的其他变量以免产生未定义行为。Out-of-TreeBuild:如果支持分离构建源码目录和构建目录分开TOPDIR通常指向源码根目录而另一个变量如OBJDIR或BUILD_DIR指向构建输出目录。此时需区分SRC_TOPDIR和BUILD_TOPDIR。1.1.3 总结定义TOPDIR : $(shell pwd)目的提供统一的根路径引用避免相对路径../的混乱传递通过export TOPDIR或者在递归$(MAKE)命令中显示传递使用在子makefile中通过$(TOPDIR)/include、$(TOPDIR)/lib等方式访问全局资源。1.2 srctree1.2.1 srctree作用在Linux内核、U-Boot等基于Kbuild构建系统的项目中srctree是一个核心变量代表源代码树的根目路径Source Tree。它的主要作用是确保构建系统能够正确定位源文件、头文件、脚本和配置文件无论构建是在源码目录内In-tree还是在单独的构建目录中Out-of-tree进行。1.2.2 总结srctree是Kbuild构建系统中用于解耦源码位置与构建位置的关系变量。它确保了构建脚本编译器和连接器总能找到原始的源代码和配置信息即使构建过程发生在完全不同的目录结构中。1.3 core-y1.3.1 定义与作用core-y列出了构成内核最基础、最核心功能的子目录。这些目录中的代码会被编译并链接到最终的vmlinux内核镜像中。它通常包含架构无关的核心系统以及当前CPU架构特定的核心代码。1.3.2 core-y与其他变量的关系变量含义典型内容core-y内核核心部分init/, usr/, arch/$(SRCARCH)/, kernel/, mm/等drivers-y驱动程序和子系统drivers/, sound/, firmware/等libs-y库文件lib/ arch/$(SRCARCH)/lib/等net-y网络栈net/1.3.3 为什么区分core-y链接顺序内核链接器脚本vmlinux.lds对sections的顺序有严格要求core-y中的代码通常包含内核启动最早需要的部分如init/main.c因此它们需要被优先链接或放置在特定的内存区域。模块化构建Kbuild递归进入这些目录生成各自的built-in.a静态库。这种分层结构使得构建系统能够并行处理不同的子目录提高编译效率。配置管理通过.config文件用户可以决定哪些子系统如文件系统、网络协议被编译进内核核心即加入core-y对应的built-in.a,哪些被编译为模块.ko。1.4 init-y1.4 obj-y1.5 LDS_FILE1.6 MAKECMDGOALS1.7 KBUILD_CPPFLAGS该变量是系统定义变量用来记录make命令中传入目标名称。1.8 KBUILD_CFLAGS1.9 KBUILD_OUTPUT1.10 KBUILD_SRC1.11 KBUILD_ROOT1.12 KBUIOLD_OUTPUT_ROOT1.13 KBUILD_VERBOSE1.14 CURDIR1.15 MAKEFLAGS
上一篇/下一篇内容由系统自动关联 返回资讯列表 →