Makefile教程

Makefile 宏

make 程序允许您使用类似于变量的宏。宏在 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 选取所有更改的源文件。
在隐式规则中使用了另外两个特殊的宏。他们是-
$ <导致操作的相关文件的名称。< span> $* 目标文件和依赖文件共享的前缀。
常见的隐含规则是从 .cpp(源文件)构建 .o(目标)文件。
.cpp.o:
   $(CC) $(CFLAGS)-c 
.cpp.o:
   $(CC) $(CFLAGS)-c $<

Alternatively:

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

常规宏

有各种默认宏。您可以通过键入"make-p"打印出默认值来查看它们。从它们的使用规则来看,大多数都非常明显。
这些预定义的变量,即隐式规则中使用的宏分为两类。它们如下-
作为程序名称的宏(例如 CC) 包含程序参数的宏(例如 CFLAGS)。
下表列出了在 makefile 的内置规则中用作程序名称的一些常用变量-
变量和描述
AR
档案维护程序;默认为`ar'。
AS
编译汇编文件的程序;默认为`as'。
CC
编译C程序的程序;默认为`cc'。
CO
从RCS检出文件的程序;默认为"co"。
CXX
编译C++程序的程序;默认为`g++'。
CPP
程序运行C预处理器,结果输出到标准输出;默认为`$(CC)-E'。
FC
用于编译或预处理 Fortran 和 Ratfor 程序的程序;默认为`f77'。
GET
从 SCCS 中提取文件的程序;默认为`get'。
LEX
用于将 Lex 语法转换为源代码的程序;默认为`lex'。
YACC
用于将 Yacc 语法转换为源代码的程序;默认为`yacc'。
LINT
用于在源代码上运行 lint 的程序;默认为`lint'。
M2C
用于编译Modula-2源代码的程序;默认为`m2c'。
PC
用于编译Pascal程序的程序;默认为`pc'。
MAKEINFO
将Texinfo 源文件转换为Info 文件的程序;默认为`makeinfo'。
TEX
从 TeX 源代码制作 TeX dvi 文件的程序;默认为`tex'。
TEXI2DVI
从Texinfo源制作TeX dvi文件的程序;默认为`texi2dvi'。
WEAVE
将 Web 翻译成 TeX 的程序;默认为"编织"。
CWEAVE
将C Web 翻译成TeX 的程序;默认为`cweave'。
TANGLE
将Web 翻译成Pascal 的程序;默认为"缠结"。
CTANGLE
将C Web 翻译成C 的程序;默认为`ctangle'。
RM
删除文件的命令;默认为`rm-f'。
这是一个变量表,其值是上述程序的附加参数。除非另有说明,否则所有这些的默认值都是空字符串。
变量和描述
ARFLAGS
给存档维护程序的标志;默认为"rv"。
ASFLAGS
在".s"或".S"文件上显式调用时要提供给汇编器的额外标志。
CFLAGS
提供给 C 编译器的额外标志。
CXXFLAGS
提供给 C 编译器的额外标志。
COFLAGS
要给 RCS 合作程序的额外标志。
CPPFLAGS
提供给使用它的 C 预处理器和程序(例如 C 和 Fortran 编译器)的额外标志。
FFLAGS
要给 Fortran 编译器的额外标志。
GFLAGS
提供给 SCCS get 程序的额外标志。
LDFLAGS
当编译器应该调用链接器`ld'时给它们额外的标志。
LFLAGS
要给 Lex 的额外标志。
YFLAGS
给 Yacc 的额外标志。
PFLAGS
提供给 Pascal 编译器的额外标志。
RFLAGS
为 Ratfor 程序提供给 Fortran 编译器的额外标志。
LINTFLAGS
要给 lint 的额外标志。
注意-您可以使用"-R"或"--no-builtin-variables"选项取消隐式规则使用的所有变量。
您也可以在命令行定义宏,如下所示-
make CPP = /home/courses/cop4530/spring02
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4