Makefile精简笔记(1)框架与变量

从零开始,编写Makefile。

目录

1.Makefile编写框架

1.1最简格式:

1.2关联格式:

1.3删除结果

2.Makefile添加变量

2.1自定义变量

2.2自动化变量


1.Makefile编写框架

1.1最简格式:

目标:依赖           //目标可以是中间文件、可执行文件、标签
    指令             //shell指令,起始用tab

例程1.1:

//编写test.c,打印test
#include <stdio.h>
void main()
{
        printf("test\n");
}
//编写Makefile文件
test:test.c
        gcc -o test test.c
//在终端编译运行
$make
$./test

1.2关联格式:

最终目标:依赖(中间文件1 中间文件2 ···)
    指令
目标1(中间文件1):依赖(中间文件1.1 中间文件1.2 ···)
    指令
目标2(中间文件2):依赖(中间文件2.1 中间文件2.2 ···)
    指令
···

例程1.2:

//编写test.h
#include <stdio.h>
void test1(void);
void test2(void);
//编写test1.c
#include "test.h"
void test1(void)
{
        printf("test1\n");
}
//编写test2.c
#include "test.h"
void test2(void)
{
        printf("test2\n");
}
//编写main.c
#include "test.h"
void main()
{
        test1();
        test2();
}

main调用了test1.c和test2.c的函数,根据依赖关系写Makefile如下

main:main.o test1.o test2.o
        gcc main.o test1.o test2.o -o main
main.o:main.c test.h
        gcc -c main.c -o main.o
test1.o:test1.c test.h
        gcc -c test1.c -o test1.o
test2.o:test2.c test.h
        gcc -c test2.c -o test2.o

在终端中编译运行,结果如下

$make
$./main 
test1
test2

1.3删除结果

如果要删除编译结果,需要增加以下指令

.PHONY:clean
clean:
        rm -rf *.o main

至此,已经完成了一个Makefile文件的框架,接下来就是在框架内增加细节。

2.Makefile添加变量

2.1自定义变量

自定义变量格式为:变量名=值;使用时$(变量名);

赋值符号有所扩充

赋值符号说明
:=简单赋值,赋值操作只进行一次
=递归赋值,赋值操作进行多次,递归影响所有相关变量。
+=追加赋值

采用自定义变量,修改Makefile:

OBJ=main.o test1.o test2.o
main:$(OBJ)
        gcc $(OBJ) -o main
main.o:main.c test.h
        gcc -c main.c -o main.o
test1.o:test1.c test.h
        gcc -c test1.c -o test1.o
test2.o:test2.c test.h
        gcc -c test2.c -o test2.o
.PHONY:clean
clean:
        rm -rf *.o main

自定义变量类似宏定义,减少了代码修改的耗时。

2.2自动化变量

变量说明
$@此目标
$^此目标的所有依赖
$<此目标的第一个依赖

改进上一个Makefile为:

OBJ=main.o test1.o test2.o
main:$(OBJ)
        gcc -o $@ $^
main.o:main.c test.h
        gcc -o $@ -c $<
test1.o:test1.c test.h
        gcc -o $@ -c $<
test2.o:test2.c test.h
        gcc -o $@ -c $<
.PHONY:clean
clean:
        rm -rf *.o test

自动化变量简化了Makefile代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值