Makefile系列(一)——简介

 

 

Makefile系列(一)——简介

小狼@http://blog.csdn.net/xiaolangyangyang

 


一、makefile函数的使用:

        函数调用,很像变量的使用,也是以“$”来标识的,其语法如下:

                $(<function> <arguments>)

        或是

                ${<function> <arguments>}

二、makefile常用函数

        1.字符串处理函数:

                subst:字符串替换函数

                patsubst:模式字符串替换函数

                strip:去掉空格函数

                findstring:查找字符串函数

                filter:过滤函数

                filter-out:反过滤函数

                sort:排序函数

                word:取单词函数

                wordlist:取单词串函数

                words:单词个数统计函数

                firstword:首单词函数

        2.文件名操作函数:

                dir:取目录函数

                notdir:取文件函数

                suffix:取后缀函数

                basename:取前缀函数

                addsuffix:加后缀函数

                addprefix:加前缀函数

                join:连接函数

        3.foreach函数:循环函数

        4.if函数:条件判断函数

        5.call函数:表达式执行函数

        6.origin函数:得出变量来历的函数

        7.shell函数:执行shell命令的函数

三、makefile隐含规则使用的变量

        1.主要的预定义变量

                $@:目标文件

                $%:当规则的目标文件是一个静态库文件时,代表静态的一个成员名

                $<:第一个依赖文件

                $?:所有比目标文件更新的依赖文件列表

                $^:所有的依赖文件

                $+:类似“$^”,但是它保留了依赖文件中重复出现的文件

                $*:在静态规则和静态模式规则中,代表“茎”

        2.关于命令的变量:

                AR:函数库打包程序,默认命令是"ar"

                AS:汇编语言编译程序,默认命令是”as“

                CC:C语言编译程序,默认命令是”cc“

                CXX:C++语言编译程序,默认命令是”g++“

                CO:从RCS文件中扩展文件程序,默认命令是”co“

                CPP:C程序的预处理器,默认命令是”$(CC) -E“

                FC:Fortran和Ratfor的编译器和预处理程序,默认命令是”f77“

                GET:从SCCS文件中扩展文件的程序,默认命令是”get“

                LEX:lex方法分析器程序,默认命令是”lex“

                PC:Pascal语言编译程序,默认命令是”pc“

                YACC:yacc文法分析器,默认命令是”yacc“

                YACCR:yacc文法分析器,默认命令是”yacc -r“

                MAKEINFO:转换texinfo源文件(.texi)到info文件程序,默认命令是”makeinfo“

                TEX:从tex源文件创建TeX DVI文件的程序,默认命令是”tex“

                TEXI2DVI:从Texinfo源文件创建Tex DVI文件的程序,默认命令是“texi2dvi”

                WEAVE:转换Web到TeX的程序,默认命令是“weave”

                CWEAVE:转换C Web到TeX的程序,默认命令是“cweave”

                TANGLE:转换Web到Pascal语言的程序,默认命令是“tangle”

                CTANGLE:转换C Web到C语言的程序,默认命令是“ctangle”

                RM:删除文件命令,默认命令是“rm -f”

        3.关于命令参数的变量:

                ARFLAGS:函数库打包程序AR命令的参数,默认值是“rv”

                ASFLAGS:汇编语言编译器参数

                CFLAGS:C语言编译器参数

                CXXFLAGS:C++语言编译器参数

                COFLAGS:RCS命令参数

                CPPFLAGS:C预处理器参数

                FFLAGS:Fortran语言编译器参数

                GFLAGS:SCCS“get”程序参数

                LDFLAGS:链接器参数

                LFLAGS:lex文法分析器参数

                PFLAGS:Pascal语言编译器参数

                RFLAGS:Ratfor程序的Fortran编译器参数

                YFLAGS:yacc文法分析器参数

四、makefile特殊变量

        vpath/VPATH

五、makefile的后缀规则和模式规则

        后缀规则(Suffix Rule):后缀规则是定义隐含规则的老风格方法。后缀规则定义了将一个具有某个后缀的文件(例如.c文件)转换为具有另外一种后缀的文件(例如.o文件)的方法。每个后缀规则以两个成对出现的后缀名定义,例如:将.c文件转换为.o文件的后缀规则可定义为:

                .c.o:

                $(CC) $(CCFLAGS) $(CPPFLAGS) -c -o $@ $<

        模式规则(Pattern Rule):这种规则更加通用,因为可以利用模式规则定义更加复杂的依赖性规则。模式规则看起来非常类似于正则规则,但在目标名称的前面多了一个%号,同时可用来定义目标和依赖文件之间的关系,例如下面的模式规则定义了如何将任意一个.c文件转换为.o文件:

                %.c:%.o

                $(CC) $(CCFLAGS) $(CPPFLAGS) -c -o $@ $<

六、自动生成makefile工具:autotools

        例解autoconf和automake生成makefile文件

        使用autotools生成包含多文件的makefile

        autotools生成Makefile

        1.autotools工具集(使用which查看):

                aclocal,autoscan,autoconf,autoheader,automake,libtools

        2.使用autotools自动生成makefile:

                a.利用文本编辑器创建项目源文件

                b.使用autoscan生成configure.scan

                c.编辑configure.scan,修改相关内容,并将其重命名为configure.in

                d.使用aclocal生成aclocal.m4

                e.使用autoconf生成configure

                f.使用autoheader生成config.h.in

                g.编辑makefile.am(手动创建)

                h.使用automake生成makefile.in(将makefile.am转换为makefile.in)

                i.使用configure生成makefile(将makefile.in转换为makefile)

                j.使用make生成可执行程序

                k.使用make install安装可执行程序

                l.使用make dist生成可执行程序压缩包

                m.解压可执行程序压缩包

                n.执行可执行程序

        3.使用autotools自动生成makefile实例

main.c

 

#include <stdio.h>

int main(void)
{
    printf("main start!\n");
    print();
    return 0;
}

 

hello.c

 

#include "hello.h"

void print(void)
{
    char buf[32] = "123";
    strcat(buf, "456");
    printf("%s\n", buf);
    printf("hello,world!\n");

    return;
}

 

hello.h

 

#ifndef __HELLO_H__
#define __HELLO_H__

#include <stdio.h>
#include <string.h>

void print(void);

#endif

        1. # autoscan
        2. # gedit configure.scan
                ++ AM_INIT_AUTOMAKE(main, 1.0)
                ++ AC_OUTPUT(Makefile)

            # mv configure.scan configure.in
        3. # aclocal
        4. # autoconf
        5. # autoheader
        6. # gedit Makefile.am
               ++ AUTOMAKE_OPTIONS= foreign
               ++ bin_PROGRAMS= main
               ++ main_SOURCES= main.c hello.c

        7. # automake --add-missing
        8. # ./configure
        9. # make

七、其他

        1.PHONY:伪目标

        2.SUFFIXES:当前makefile内支持文件后缀的类型列表

        3.隐含规则:隐含规则

        4.隐含规则链:

                INTERMEDIATE/SECONDARY/PRECIOUS

        5.相关连接:Makefile的学习笔记

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值