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)