当我们用git管理项目代码时,可能从服务器的任何路径下克隆项目并进行编译,这就需要在Makefile中获取当前项目的路径。获取当前路径的方法有以下三种:
方法一
PATH := $(shell pwd)
缺陷:只能从包含Makefile的目录下make,否则PATH将不是Makefile的路径。
方法二
MKFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
PROJ_DIR := $(notdir $(patsubst %/,%,$(dir $(MKFILE_PATH))))
可以看到,用这种方法无论在哪里make都可以正确获取Makefile所在的目录
方法三
当make版本低于等于3.80,不支持 lastword和abspath,所以方法二不适用。
MKFILE_PATH := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
PROJ_DIR:=$(shell cd $(shell dirname $(MKFILE_PATH)); pwd)
show:
@echo $(MKFILE_PATH)
@echo $(PROJ_DIR)