top=$(CURDIR) SRC_DIR=$(top)/src BUILD_DIR=$(SRC_DIR) src=$(wildcard $(SRC_DIR)/*.c) obj=$(patsubst $(SRC_DIR)/%.c, %.o, $(src)) target=a.out all: cd ./src && $(MAKE) \ -f $(top)/Makefile a.out CURDIR=$(top) a.out:$(obj) gcc $^ -o $@ .c.o: gcc -c $< clean: rm -f $(BUILD_DIR)/*.o $(BUILD_DIR)/$(target)
1.工作目录
(0)Makefile的工作目录
Makefile的工作目录默认继承为其父进程的工作目录,即shell的当前目录,
Makefile的工作目录使用CURDIR变量,
可以在make时设置CURDIR以改变Makefile的工作目录
(1)变量定义的工作目录
Makefile执行时,变量首先被定义,变量定义的工作目录是 CURDIR
(2)命令执行的工作目录
命令执行的工作目录是CURDIR,命令中可以修改本条命令的工作目录,无法改变其他命令工作目录。使用 && 除外