如何获取Microsoft NMAKE Makefile路径以实现任意目录构建EXE?
在Microsoft NMAKE中获取Makefile所在目录的方法
要实现和GNU Make中$(dir $(realpath $(lastword $(MAKEFILE_LIST))))相同的效果,在NMAKE里可以通过组合内置宏和批处理命令完成,具体实现如下:
- 核心代码实现
在你的NMAKE Makefile中添加以下内容:
# 获取当前Makefile的绝对路径目录 !IFDEF MAKEFILE # 组合nmake执行目录与指定的Makefile路径,生成绝对路径 MAKEFILE_ABS = $(MAKEDIR)\$(MAKEFILE) # 用批处理for命令提取文件的目录部分 MAKEFILE_DIR = $(shell for %%i in ("$(MAKEFILE_ABS)") do @echo %%~dpi) !ELSE # 未通过/F指定Makefile时,默认当前执行目录即为Makefile所在目录 MAKEFILE_DIR = $(MAKEDIR)\ !ENDIF
- 代码说明
MAKEFILE是NMAKE内置宏:当你通过nmake /F path/to/your/Makefile指定Makefile时,该宏会被赋值为你指定的路径(支持相对或绝对路径)。MAKEDIR是NMAKE内置宏,代表执行nmake命令时的工作目录。- 批处理
for命令中的%%~dpi参数会提取文件路径的驱动器+目录部分,自动完成相对/绝对路径的转换。 - 若未使用
/F选项(直接在Makefile所在目录执行nmake),则直接用MAKEDIR作为Makefile的所在目录。
- 验证使用
可添加一行消息命令验证结果:
!MESSAGE 当前Makefile所在目录:$(MAKEFILE_DIR)
内容的提问来源于stack exchange,提问作者Yogev Neumann
相关产品推荐
相关产品推荐

