新彩天欢迎您!
幻海优品

Makefile - 其他功能

在本章中,我们将研究Makefile的其他各种功能.

递归使用Make

递归使用 make 表示在makefile中使用 make 作为命令.当您需要为构成更大系统的各种子系统创建单独的makefile时,此技术非常有用.例如,假设您有一个名为`subdir'的子目录,它有自己的makefile,并且您希望包含目录的makefile在子目录中运行 make .你可以写下面的代码 :

subsystem:   cd subdir && $(MAKE)or, equivalently: subsystem:   $(MAKE) -C subdir

只需复制此示例即可编写递归 make 命令.但是,您需要了解它们的工作原理和原因,以及子制作如何与顶级制作相关.

将变量传递给子制作

顶级 make 的变量值可以通过显式请求通过环境传递给sub-make.这些变量在sub-make中定义为默认值.除非使用`-e'开关,否则不能覆盖sub-make makefile使用的makefile中指定的内容.

传递或导出变量 make 将变量及其值添加到环境中以运行每个命令.反过来,子make使用环境初始化其变量值表.

特殊变量SHELL和MAKEFLAGS总是被导出(除非你取消它们).如果您将MAKEFILES设置为任何内容,则会导出MAKEFILES.

如果要将特定变量导出到子品牌,请使用export指令,如下所示 :

export variable ...

如果要阻止变量导出,请使用undeport指令,如下所示 :

  unexport variable ...

变量MAKEFILES

如果定义了环境变量MAKEFILES, make 会将其值视为其他makefile的名称列表(由空格分隔)在别人之前阅读.这与include伪指令非常相似:在各种目录中搜索这些文件.

MAKEFILES的主要用途是在 make 的递归调用之间进行通信./p>

包括来自不同目录的头文件

如果您已将头文件放在不同的目录中并且您正在运行 make 在不同的目录中,则需要提供头文件的路径.这可以使用makefile中的-I选项完成.假设functions.h文件在/home/IT roof/header文件夹中可用,其余文件在/home/IT roof/src/文件夹中可用,那么makefile将写成如下 :

INCLUDES = -I "/home/IT屋/header"CC = gccLIBS =  -lmCFLAGS = -g -WallOBJ =  main.o factorial.o hello.ohello: ${OBJ}   ${CC} ${CFLAGS} ${INCLUDES} -o $@ ${OBJS} ${LIBS}.cpp.o:   ${CC} ${CFLAGS} ${INCLUDES} -c $<

将更多文本附加到变量

通常,在已定义变量的值中添加更多文本会很有用.你用一个包含`+ ='的行来做这个,如图所示 :

  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 是相当于 OBJ = main.o factorial.o hello.o

从命令提示符运行Makefile

如果您准备了名为"Makefile"的Makefile ",然后只需在命令提示符下编写make,它将运行Makefile文件.但是如果你给Makefile任何其他名字,那么使用以下命令 :

  make -f your-makefile-name

免责声明:以上内容(如有图片或视频亦包括在内)有转载其他网站资源,如有侵权请联系删除