linux进阶06——Makefile(三)

需求

在一个文件夹下面有多个.c文件,分别对应一个小程序,而总共只有一个Makefile,只要一个make命令就可以把这些程序全部编译一遍。并且,再往里面增加小程序时,make一下也可以编译这个新增的程序。

思路

1. 我们将文件夹下每个.c文件都视为一个程序,编译出来程序的名字(目标)与.c文件的文件名相同(去掉.c后缀),比如app1.c编译出来的程序为app1。实现这个目的的Makefile片断为:

SOURCE = $(wildcard *.c)  
TARGETS = $(patsubst %.c, %, $(SOURCE))  

2. 每个.c文件独立编译为一个目标,如果直接手写的话,对应的命令类似为:

gcc app1.c -o app1  
gcc app2.c -o app2  
gcc test.c -o test  

这样的命令可以抽象为一个,即:

$(TARGETS):%:%.c  
    $(CC) $< $(CFLAGS) -o $@  

TARGETS即为app1, app2, test,依赖为%:%c,这是一个模式变量,表示与目标相同的.c文件,即:

app1:app1.c  
app2:app2.c  
test:test.c  

完整的Makefile

SOURCE = $(wildcard *.c)  
TARGETS = $(patsubst %.c, %, $(SOURCE))  

CC = gcc  
CFLAGS = -Wall -g  

all:$(TARGETS)  

$(TARGETS):%:%.c  
    $(CC) $< $(CFLAGS) -o $@  

.PHONY:clean all  
clean:  
    -rm -rf $(TARGETS) 

本文转自公众号【良许Linux】——【玩转Makefile | 一次编译多个目标】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值