Makefile – 宏

Makefile – 宏


化妆程序允许您使用宏,这是类似的变量。宏在 Makefile 中定义为 = 对。下面显示了一个示例 –

MACROS  = -me
PSROFF  = groff -Tps
DITROFF = groff -Tdvi
CFLAGS  = -O -systype bsd43
LIBS    = "-lncurses -lm -lsdl"
MYFACE  = ":*)"

特殊宏

在目标规则集中发出任何命令之前,预定义了某些特殊的宏 –

  • $@ 是要制作的文件的名称。

  • $? 是变更后家属的姓名。

例如,我们可以使用如下规则 –

hello: main.cpp hello.cpp factorial.cpp
   $(CC) $(CFLAGS) $? $(LDFLAGS) -o $@

Alternatively:

hello: main.cpp hello.cpp factorial.cpp
   $(CC) $(CFLAGS) $@.cpp $(LDFLAGS) -o $@

在这个例子中,$@ 代表hello和 $? 或 $@.cpp 选取所有更改的源文件。

隐式规则中使用了两个更特殊的宏。他们是 –

  • $< 导致操作的相关文件的名称。

  • $* 目标文件和相关文件共享的前缀。

常见的隐式规则用于从 .cpp(源文件)构建 .o(对象)文件。

.cpp.o:
   $(CC) $(CFLAGS) -c $<

Alternatively:

.cpp.o:
   $(CC) $(CFLAGS) -c $*.c

常规宏

有各种默认宏。您可以通过键入“make -p”打印出默认值来查看它们。从它们的使用规则来看,大多数都非常明显。

这些预定义的变量,即隐式规则中使用的宏分为两类。它们如下 –

  • 作为程序名称的宏(例如 CC)

  • 包含程序参数的宏(例如 CFLAGS)。

下面是在 makefile 的内置规则中用作程序名称的一些常用变量的表格 –

Sr.No 变量和描述
1

AR

档案维护程序;默认为“ar”。

2

AS

编译汇编文件的程序;默认是`as’。

3

CC

编译C程序的程序;默认为“cc”。

4

CO

从 RCS 中检出文件的程序;默认为“co”。

5

CXX

编译C++程序的程序;默认是`g++’。

6

CPP

运行 C 预处理器的程序,并将结果输出到标准输出;默认为“$(CC) -E”。

7

FC

编译或预处理 Fortran 和 Ratfor 程序的程序;默认为‘f77’。

8

GET

从 SCCS 中提取文件的程序;默认为“获取”。

9

LEX

用于将 Lex 语法转换为源代码的程序;默认是`lex’。

10

YACC

用于将 Yacc 语法转换为源代码的程序;默认是`yacc’。

11

LINT

用于在源代码上运行 lint 的程序;默认是`lint’。

12

M2C

用于编译 Modula-2 源代码的程序;默认是‘m2c’。

13

PC

用于编译 Pascal 程序的程序;默认为“pc”。

14

MAKEINFO

将 Texinfo 源文件转换为 Info 文件的程序;默认是`makeinfo’。

15

TEX

从 TeX 源制作 TeX dvi 文件的程序;默认是`tex’。

16

TEXI2DVI

从 Texinfo 源制作 TeX dvi 文件的程序;默认是`texi2dvi’。

17

WEAVE

将 Web 翻译成 TeX 的程序;默认为“编织”。

18

CWEAVE

将 C Web 翻译成 TeX 的程序;默认是`cweave’。

19

TANGLE

将 Web 翻译成 Pascal 的程序;默认为“缠结”。

20

CTANGLE

将 C Web 翻译成 C 的程序;默认是`ctangle’。

21

RM

删除文件的命令;默认是`rm -f’。

这是一个变量表,其值是上述程序的附加参数。除非另有说明,否则所有这些的默认值都是空字符串。

Sr.No. 变量和描述
1

ARFLAGS

给存档维护程序的标志;默认为“rv”。

2

ASFLAGS

在“.s”或“.S”文件上显式调用时提供给汇编器的额外标志。

3

CFLAGS

提供给 C 编译器的额外标志。

4

CXXFLAGS

提供给 C 编译器的额外标志。

5

COFLAGS

提供给 RCS 合作程序的额外标志。

6

CPPFLAGS

提供给使用它的 C 预处理器和程序(例如 C 和 Fortran 编译器)的额外标志。

7

FFLAGS

提供给 Fortran 编译器的额外标志。

8

GFLAGS

提供给 SCCS get 程序的额外标志。

9

LDFLAGS

当编译器应该调用链接器,`ld’ 时提供给编译器的额外标志。

10

LFLAGS

给 Lex 的额外标志。

11

YFLAGS

给 Yacc 的额外标志。

12

PFLAGS

提供给 Pascal 编译器的额外标志。

13

RFLAGS

为 Ratfor 程序提供给 Fortran 编译器的额外标志。

14

LINTFLAGS

给 lint 的额外标志。

注意– 您可以使用“-R”或“–no-builtin-variables”选项取消隐式规则使用的所有变量。

您还可以在命令行定义宏,如下所示 –

make CPP = /home/courses/cop4530/spring02

觉得文章有用?

点个广告表达一下你的爱意吧 !😁