开发手册 欢迎您!
软件开发者资料库

Makefile - 宏

Makefile宏 - 从简单和简单的步骤学习Makefile,从基本到高级概念,包括为什么包括Makefile,宏,依赖关系,后缀规则,指令,重新编译,其他功能,示例,SOAP XML-RPC Web服务AJAX JavaScript J2EE ASP.NET VB.NET C#C ++ C Pro * C Makefile PERL Parrot Ruby JAVA J2EE CORBA BILLING CRM OM DLL PHP CGI MySQL PL / SQL SDLC CSS ASP DHTML Flash。

make 程序允许您使用与变量类似的宏.宏在Makefile中定义为= pairs.下面显示了一个示例 :

MACROS  = -mePSROFF  = groff -TpsDITROFF = groff -TdviCFLAGS  = -O -systype bsd43LIBS    = "-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 $< 或者: .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

获取

从SCCS中提取文件的程序;默认是`get'.

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

将网页翻译成TeX的计划;默认是`weave'.

18

CWEAVE

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

19

TANGLE

将Web翻译成Pascal的程序;默认是`tangle'.

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

为Fortfor编译器提供Ratfor程序的额外标志.

14

LINTFLAGS

赋予lint的额外标志.

注意 :  ;您可以使用'-R'或'--no-builtin-variables'选项取消隐式规则使用的所有变量.

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

  make CPP =/home/courses/cop4530/spring02