Makefile 其他功能 - Makefile
make 递归使用
递归使用的手段使用,make在makefile作为命令。这种技术是非常有用的,当你想要的makefile各种子系统组成一个更大的系统。例如,假设你有一个子目录,子目录都有其自己的makefile,并且您希望所在目录的makefile中运行make子目录。可以做到这一点如以下:
subsystem:
cd subdir && $(MAKE)
or, equivalently
subsystem:
$(MAKE) -C subdir
可以编写递归复制这个例子只是通过make命令,但有很多事情,了解他们是如何和为什么工作的,以及如何子涉及到顶层make。
通信变量到子make
顶层make变量的值可以被传递到子通过环境,通过显式请求。这些变数定义子作为默认值,但不会覆盖子的makefile使用makefile中所指定的,除非使用`-e'开关
向下传递,或导出,一个变量,变量和其值的环境中运行每个命令添加。子make反过来,make使用环境变量值来初始化它的表格
特殊变量SHELL和MAKEFLAGS总是导出(除非取消导出)。 MAKEFILES导出,如果把它设置到任何东西。
如果想导出特定变量的一个子制造,使用导出指令,像这样:
export variable ...
如果想阻止一个变量被导出的,使用撤消导出的指令,像这样:
unexport variable ...
MAKEFILES 变量
MAKEFILES如果环境变量的定义,make额外的makefile 名称列表(由空格分隔)之前被读取别人认为其值。这很像include指令:不同的目录中查找这些文件。
makefile的主要用途是MAKE递归调用之间的通信
头文件包含在不同的目录
如果已经把你的头文件在不同的目录,在不同的目录中运行make,那么它需要告诉头文件的路径。这是可以做到的makefile中使用-I选项。假设该functions.h文件可在/home/yiibai/header头和其他文件/home/yiibai/src/然后进行文件将被写入如下。
INCLUDES = -I "/home/yiibai/header"
CC = gcc
LIBS = -lm
CFLAGS = -g -Wall
OBJ = main.o factorial.o hello.o
hello: ${OBJ}
${CC} ${CFLAGS} ${INCLUDES} -o $@ ${OBJS} ${LIBS}
.cpp.o:
${CC} ${CFLAGS} ${INCLUDES} -c $<
追加更多的文本变量
通常,它用于添加更多的文字,已定义的变量的值。make 这行包含'+ =',像这样:
objects += another.o
这需要值的变量对象,并添加文字`another.o'(前面由一个单一的空间)。因此:
objects = main.o hello.o factorial.o
objects += another.o
设置`文件main.o hello.o factorial.o another.o'的对象。
使用'+ ='是类似于:
objects = main.o hello.o factorial.o
objects := $(objects) another.o
Makefile中的续行
如果不喜欢太大的行,在Makefile中,然后你可以打破线使用反斜杠“\”,如下图所示
OBJ = main.o factorial.o \
hello.o
is equivalent to
OBJ = main.o factorial.o hello.o
从命令提示符下运行的Makefile
如果已经准备好请示的Makefile的名称为“Makefile”文件,然后简单地写在命令提示符下,它将运行Makefile文件。但是,如果有任何其他的名字的Makefile,然后使用以下命令
make -f your-makefile-name