You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GNU Make中如何获取当前Makefile的绝对路径(含被包含场景)

获取GNU Makefile所在的绝对路径目录

要获取当前Makefile(无论是作为主文件直接执行,还是被其他Makefile包含)的所在绝对路径目录,可以借助GNU Make的内置函数和变量组合实现,具体方案如下:

核心实现代码

在目标Makefile中添加以下定义:

# 定义变量存储当前Makefile的绝对路径目录
THIS_MAKEFILE_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))

各部分解释

  • $(MAKEFILE_LIST):GNU Make的内置变量,是按处理顺序排列的所有已加载Makefile文件名列表。每当include一个新的Makefile时,该文件名将被追加到列表末尾。
  • $(lastword $(MAKEFILE_LIST)):提取列表的最后一个元素,也就是当前正在处理的Makefile(主文件或被包含文件)的文件名(可能是相对路径或绝对路径)。
  • $(abspath ...):将输入路径转换为绝对路径,确保无论make命令的调用目录、Makefile的引用方式如何,最终得到的都是完整的绝对路径。
  • $(dir ...):从完整文件路径中提取目录部分,最终得到该Makefile所在的绝对路径目录。

适用场景验证

  1. 直接执行主Makefile:比如在任意目录执行make -f /path/Makefile,THIS_MAKEFILE_DIR的值会是/path/。
  2. 被其他Makefile包含:假设另一个Makefile通过include /path/Makefile引入该文件,在被包含的/path/Makefile中,THIS_MAKEFILE_DIR依然会正确返回/path/。

这个方案不受CURDIR(make命令调用时的当前工作目录)影响,完全依赖Makefile自身的加载信息,能覆盖所有常见使用场景。

内容的提问来源于stack exchange,提问作者ABu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 10:57:07