快速写一个Makefile

本文主要展示Makefile的基本要素和示例,让读者可以快速写出一个实用的Makefile。

简要说明

Makefile,GNU make命令工具。

  • 书写格式

<target> : <prerequisites>

[tab]  <commands>

<target>  文件名或某操作的名字(伪目标phony target); 
<prerequisites>  通常为一组文件名,用空格间隔;
<commands>  一行或多行shell命令;
[tab]键可以用.RECIPEPREFIX变量替换成其它字符;
每行命令各自在不同的shell中执行。同一行可以用分号间隔多个命令,用反斜杠\转义换行。

  • 赋值与变量

赋值的几种方式:

    =    延时,被使用时才展开定义
    ≔   定义即生效
    ?=  该变量为空时设置值
    +=  追加

内置变量:CC、AR、RM
自动变量:
$^    所有的依赖文件
$@  所有的目标文件
$<   第一个依赖文件
$*    通配符%通配的部分

Makefile示例

#This is a simple Makefile example
CC = gcc
CFLAGS = -I./include/
CFLAGS += -Wall -Werror

CODE_VER := 1.0
CFLAGS += -DTEST_ENABLE
CFLAGS += -DTEST_VER="\"$(CODE_VER)\""

LDDIR = -L./lib/
LDFLAGS = -ldl

BIN_NAME:=simple_test
OBJS = $(BIN_NAME).o  
all:$(BIN_NAME)

$(BIN_NAME):$(OBJS)
	$(CC) -o $@ $^ $(LDDIR) $(LDFLAGS)

.PHONY: clean
clean:
	rm -rf $(OBJS) $(BIN_NAME)

上面只有一个.c文件的情况,其实只要键入gcc命令(示例如下)就可以编译生成可执行文件。

gcc -o simple_test simple_test.c

但是对于有多个文件目录的代码工程,Makefile就会让编译更高效。

从上面的图片中,可以看到CFLAGS变量是-c编译参数,该变量通过-I指定头文件的路径信息,-D向.c和.h文件传递参数。LDFLAGS变量是-o链接参数,可以链接需要用到的动态库。另外Makefile通过-L指定所需链接的动态库路径。

本Makefile示例中有一句".PHONY: clean",声明伪目标,避免该工作目录下有名称为clean的文件而使得make命令报错,例如提示"make: `clean' is up to date."

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值