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