all:
echo $(var)
都可执行shell命令
2、Makefile中make版export
同上,小标题的意思是,这里的export完全是make语法中的操作符。它通常是用来向后来发起的make进程
(这些后起的make进程由当前的make进程启动)传送变量。
3、ifdef O
ifeq ("$(origin O)", "command line")
BUILD_DIR := $(O)
endif
endif
all:
echo $(BUILD_DIR)
如果在命令行输入了O=123,运行就会输出123。origin函数判断是都变量被定义。
4、.PHONY:clean
clean:
-rm a.o b.o
rm之前-忽略执行过程中的错误
用伪目标.PHONY防止本文件有名为clean的文件,必须是PHONY
如果本路径有clean这个文件,执行makeclean会显示clean已经是最新
5、echo $(CURDIR)显示当前的路径,但是CURDIR在shell中没定义。
6、“ objects = *.o”。它表示变量“ objects”的值是字符串“ *.o”(并不是期
望的空格分开的.o 文件列表)。当需要变量“ objects”代表所有.o 文件列表示,需要使
用函数“ wildcard”(objects = $(wildcar*.o))。在规则中,通配符会被自动展开。但在变量的定义和函数引用时, 通配 符将失效
7、“ ~john/bin”就是代表用户john 的宿主目录下的bin 目录。
8、LIBS= libtest.a
foo : foo.c | $(LIBS)
$(CC) $(CFLAGS) $< -o $@ $(LIBS)
make在执行这个规则时,如果目标文件“ foo”已经存在。当“ foo.c”被修改以后,目标“ foo”
将会被重建,但是当“ libtest.a”被修改以后。将不执行规则的命令来重建目标“ foo”。