简单Makefile编写

Makefile编写
实际上,make工具是一个自动编译管理器,能够根据文件的时间戳自动发现更新过的文件从而减少编译的工作量。同时,它通过读入Makefile文件中的内容来执行大量的编译工作,用户只需编写一次简单的编译语句即可。它大大提高了项目开发和维护的工作效率。

Makefile基本结构
Makefile用来告诉make如何编译和链接一个程序,它是make读入的唯一配置文件。
在一个Makefile中通常包含如下内容:

  1、需要由make工具创建的目标体,目标体通常是目标文件、可执行文件或是一个标签
  2、要创建的目标所依赖的文件。
  3、创建每个目标体时需要运行的命令

Makefile文件格式如下:
target:依赖文件
command
例如:有三个文件分别为main.c fun.c fun.h,希望创建的目标为 main,根据依赖文件,可写成

        main:main.o fun.o
                gcc main.o fun.o -o main
        main.o:main.c
                gcc -c main.c  -o main.o
        fun.o:fun.c fun.h
                gcc -c fun.c fun.h -o fun.o
        clean:
                rm main.o fun.o main
        其中,clean由于缺少目标,称之为伪目标文件,需要执行clean,可输入make clean执行

Makefile变量
创建变量的目的:用来代替一个文本字符串

包括:
1、系列文件的名字
2、传递给编译器的参数
3、需要运行的程序
4、需要查找源代码的目录
5、需要输出信息的目录
6、需要完成的其他事

变量定义的两种方式:
递归展开方式 VAR = var
简单方式 VAR := var

创建变量后,先前示例可写为:

    OBJS=main.o fun.o
    CC=gcc
    CFLAGS=-c -Wall -o
    main:$(OBJS)
        $(CC) $(FLAGS) main
    fun.o:fun.c fun.h
        $(CC) $(FLAGS) fun.c fun.o
    clean:
        rm main $(OBJS)

Makefile包含一些自动变量,可以更加方便的进行使用.

自动变量:
$* 不包含扩展名的目标文件名称
$+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
$< 第一个依赖文件的名称
$?所有时间戳比目标文件晚的依赖文件,并以空格分开
$@目标文件的完整名称
$^ 所有不重复的目标依赖文件,以空格分开
$% 如果目标是归档成员,则该变量表示目标的归档成员名称

有了自动变量的参与,则上例Makefile可写成

    OBJS=main.o fun.o
    CC=gcc
    CFLAGS=-c -Wall -o
    main:$(OBJS)
        $(CC) $(FLAGS) $@
    fun.o:fun.c fun.h
        $(CC)  $(FLAGS) $<  $@
    clean:
        rm main $(OBJS)

通过上述步骤,已经完成了一个简单的Makefile文件的具体编写,Makefile文件的编写是一个程序员的基本功,掌握了Makefile编写,在面对大型项目时,应付起来才轻松。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值