CSDN博客

img plaris060504

makefile的规则

发表于2008/10/2 16:55:00  423人阅读

     makefile的规则是make进行处理的依据,它包括了目标文件、依赖文件和它们之间的命令。一般来说,makefile的一个语句就是一个规则,在以前的那个例子中,都显示的指出了makefile的规则关系,如:“$(CC) $(CFLAGS) -c $< -o $@”,但为了简化makefile的书写,makefile包含了隐式规则和模式规则,下面就对这两个规则进行一下阐述:

    1.隐式规则

    隐式规则可以告诉make如何使用传统的方式完成任务,这样呢,当用户使用它们时就不用详细指定它们编译的具体细节,而只需将目标文件列出就好。make会自动搜索隐式规则目录来确定如何生成目标文件。如前面的例子就可以简写如下:

    OBJS = kang.o yul.o

    CC = Gcc

    CFLAGS = -Wall -O -g

    sunq : $(OBJS)

          $(CC) $^ -o $@

    由于隐式规则的缘故,我们故可以省略后两句。在make的隐式规则中指出:所有的.o文件都可以自动由.c文件按照命令"$(CC) $(CPPFLAGS) $(CFLAGS) -c file.c –o file.o"生成。这样“kang.o”和“yul.o”就会分别调用“$(CC) $(CFLAGS) -c kang.c -o kang.o”和“$(CC) $(CFLAGS) -c yul.c -o yul.o”生成,所以在我们看到好多的makefile就会省略掉后面的几句。

注意:

    在隐式规则只能查找到相同文件名的不同后缀名文件,如”kang.o”文件必须由”kang.c”文件生成

下表3.16给出了常见的隐式规则目录:

表3.16                                              Makefile中常见隐式规则目录

对应语言后缀名

规 则

C语言:.c变为.o

$(CC) -c $(CPPFLAGS) $(CFLAGS)

C++语言:.cc或.c变为.o

$(CXX) -c $(CPPFLAGS) $(CXXFLAGS)

Pascal编译:.p变为.o

$(PC)-c $(PFLAGS)

Fortran编译:.r变为-o

$(PC)-c $(FFLAGS)

    2.模式规则

    模式规则是用来定义相同处理规则的多个文件的。不同于隐式规则,隐式规则仅仅能够用make默认的变量进行处理,而模式规则还可以引入用户自定义变量,为多个文件建立相同的规则,从而简化makefile的书写。

    模式规则的格式类似于普通规则,该规则的相关文件必须用“%”注明,使用模式规则修改后的makefile如下:

    CFLAGS = Wall -o -g

    CC = Gcc

    OBJS =kang.o yul.o

    sunq:$(OBJS)

        $(CC) -c $^ -o $@

    %.o:%.c

        $(CC) $(CFLAGS)-c $< -o $@

0 0

相关博文

我的热门文章

img
取 消
img