Makefile 入门与假目标

本文介绍了在嵌入式开发中如何使用Makefile进行编译管理。通过示例解释了简单的Makefile编写,如何处理与目标文件同名的文件或目录问题,以及如何利用假目标和变量提高Makefile的可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在嵌入式的开发中,我们经常使用了Makefile文件来编译与管理软件,本文主要介绍Makefile的入门。

1. 简单的Makefile使用。

   假设我们有两个文件foo.c 和main.c ,分别如下:

 

/*************************************************************************
	> File Name: main.c
	> Created Time: 2013年09月17日 星期二 10时08分42秒
 ************************************************************************/

#include<stdio.h>
#include "foo.h"
int main()
{
	foo();
	return 0;

}


/*************************************************************************
	> File Name: foo.c
	> Created Time: 2013年09月17日 星期二 10时07分51秒
 ************************************************************************/

#include<stdio.h>

void foo()
{
	printf("This is foo()!\n");
}


/*************************************************************************
	> File Name: foo.h
	> Created Time: 2013年09月17日 星期二 10时09分43秒
 ************************************************************************/

#include<stdio.h>
void foo();



那么如何利用Makefile编译该文件呢,首先我们编写Makefile,详细如下:

all: main.o foo.o
	gcc -o all main.o foo.o

main.o: main.c
	gcc -o main.o -c main.c

foo.o: foo.c foo.h
	gcc -o foo.o -c foo.c

clean: 
	rm all foo.o main.o


此时你只要在文件的同一目录下执行 make 就可以生存目标文件 all,make clean时会删除目标文件和中间文件。即 rm all foo.o main.o

2. 假如此时与Makefile同目录下有一个clean的文件或者是目录,如果你执行make clean ,此时你会发现每一次执行都会提示说 

 make: “clean”是最新的。

 是不是没有办法解决这个问题呢?

  答案是否定的。

在Makefile,你会发现它是多么的聪明,它提供了一个假目标的方式,让我们解决了上述的问题。

此时Makefile 文件修改如下:

.PHONY:clean
all: main.o foo.o
	gcc -o all main.o foo.o

main.o: main.c
	gcc -o main.o -c main.c

foo.o: foo.c foo.h
	gcc -o foo.o -c foo.c

clean: 
	rm all foo.o main.o


此时你make clean 你会发现 make clean可以起作用了。


3. 适当的利用 “变量”提高可维护性。

.PHONY:clean

CC = gcc
RM = rm
EXE = all
OBJS = main.o foo.o

$(EXE): $(OBJS)
	$(CC) -o $(EXE) $(OBJS)

main.o: main.c
	$(CC) -o main.o -c main.c

foo.o: foo.c foo.h
	$(CC) -o foo.o -c foo.c

clean: 
	$(RM)  -rf $(EXE) $(OBJS)





 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值