MakeFile文件模板

转自:http://blog.csdn.net/vividonly/article/details/6527061

假设有a.c文件,要把它编译成可执行文件a。

 

编译+汇编:

试了一下,以下三种写法都行:

gcc -c a.c -o a.o

gcc -c -o a.o a.c

gcc -c a.c

以上三种写法都会生成目标文件a.o。

为了让gcc在编译时产生调试信息,通常我们加上-g -O -Wall的编译选项

 

 

链接:

试了一下,以下两种写法都行:

gcc -o a a.o

gcc a.o -o a

以上两种写法都会产生可执行文件a

 

也可以直接用gcc -o a a.c一步完成编译和链接过程。

 

总结:在以上编译命令中,-o后面一定要接产生的目标。其他的顺序就可以随意。

 

再顺便复习一下简单Makefile的写法。

1、Makefile中变量的使用,如需定义TARGET变量

TARGET = a

当需要引用TARGET变量时,使用$(TARGET)

 

2、自动变量的使用,主要是以下三个:

$@: 表示规则中的目标文件集。

$<: 依赖目标中的第一个目标名字。

$^: 所有依赖目标的集合。

 

3、模式规则%的使用

%.c表示所有以.c结尾的文件,%.o表示所有以.o结尾的文件。

 

4、wildcard关键字和patsubst关键字的使用

如果要取一个特定的集合,可以用wildcard,如

SOURCE_FILES = $(wildcard *.c)表示让SOURCE_FILES的值是所有.c文件的集合

如果要替换一个集合中某些部分为其他的东西,则可用patsubst,它是一个模式字符串替换函数

如,OBJS = $(patsubst %.c,%.o,$(SOURCE_FILES))表示把SOURCE_FILES中的所有.c文件都替换成.o文件。

 

5、伪目标的使用

最典型的就是make clean的使用,写法如下:

.PHONY:clean:

clean:

rm -rf a a.o

 

以下是一个简单的常用Makefile模板:

 

 1 CC = gcc
 2 CFLAGS = -Wall -O -g
 3 SOURCE_FILES = $(wildcard *.c)
 4 OBJS = $(patsubst %.c,%.o,$(SOURCE_FILES))
 5 TARGET = a
 6 %.o : %.c %.h
 7         $(CC) -c $(CFLAGS) $< -o $@
 8 %.o : %.c
 9         $(CC) -c $(CFLAGS) $< -o $@
10 $(TARGET) : $(OBJS)
11         $(CC) $^ -o $@
12 .PHONY:clean
13 clean:
14         rm -rf $(TARGET) $(OBJS)
posted @ 2014-04-23 16:33  在于思考  阅读(346)  评论(0编辑  收藏  举报