Makefile - 其他功能

  • 简述

    在本章中,我们将研究 Makefile 的各种其他特性。
  • Make的递归使用

    递归使用make意味着使用make作为makefile中的命令。当您需要为组成更大系统的各种子系统分别生成文件时,此技术很有用。例如,假设您有一个名为 `subdir' 的子目录,它有自己的 makefile,并且您希望包含目录的 makefile 运行make子目录上。您可以通过编写以下代码来做到这一点 -
    
    subsystem:
       cd subdir && $(MAKE)
    or, equivalently:
       
    subsystem:
       $(MAKE) -C subdir
    
    你可以写递归make只需复制此示例即可。但是,您需要了解它们的工作原理和原因,以及子品牌与顶级品牌的关系。
  • 将变量传递给子制作

    顶层变量值make可以通过显式请求通过环境传递给子make。这些变量在 sub-make 中定义为默认值。除非您使用 `-e' 开关,否则您不能覆盖子制作 makefile 使用的 makefile 中指定的内容。
    要传递或导出变量,make将变量及其值添加到运行每个命令的环境中。反过来,子制作使用环境来初始化其变量值表。
    特殊变量 SHELL 和 MAKEFLAGS 始终被导出(除非您取消导出它们)。如果将 MAKEFILES 设置为任何值,它就会被导出。
    如果要将特定变量导出到子制作,请使用导出指令,如下所示 -
    
    export variable ...
    
    如果要防止变量被导出,请使用 unexport 指令,如下所示 -
    
    unexport variable ...
    
  • 变量 MAKEFILES

    如果定义了环境变量 MAKEFILES,make将其值视为要在其他文件之前读取的附加生成文件的名称列表(由空格分隔)。这很像 include 指令:在各种目录中搜索这些文件。
    MAKEFILES 的主要用途是在递归调用之间进行通信make.
  • 包括来自不同目录的头文件

    如果您将头文件放在不同的目录中并且您正在运行make在不同的目录下,则需要提供头文件的路径。这可以使用 makefile 中的 -I 选项来完成。假设 functions.h 文件在 /home/jc2182/header 文件夹中可用,其余文件在 /home/jc2182/src/ 文件夹中可用,则 makefile 将编写如下 -
    
    INCLUDES = -I "/home/jc2182/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
    
    
                                  
    lt;
    
  • 将更多文本附加到变量

    通常向已定义的变量的值添加更多文本很有用。您可以使用包含 `+=' 的行来执行此操作,如图所示 -
    
    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,那么只需在命令提示符下编写 make,它就会运行 Makefile 文件。但是,如果您为 Makefile 指定了任何其他名称,请使用以下命令 -
    
    make -f your-makefile-name