<strong>先附上一个比较简单的,测试代码用的Makefile</strong>
</pre><pre code_snippet_id="463854" snippet_file_name="blog_20140904_3_4948303" name="code" class="cpp">.PHONY: all clean CC=gcc CCFLAGS="-std=gnu99" RM=rm RMFLAGS=-fr SRCS=$(wildcard *.c) OBJS=$(patsubst %.c, %.o, $(SRCS)) EXE=exe all:$(EXE) $(EXE):$(OBJS) $(CC) $(CCFLAGS) -o $(EXE) $(OBJS) %.o:%.c $(CC) $(CCFLAGS) -o $@ -c $^ clean: $(RM) $(RMFLAGS) $(OBJS) *.out
一、make和makefile
make:在必要时重新编译所有受改动影响的源文件。
makefile:告诉make应用程序应该如何构造。
二、make命令
1. make选项和参数
-k: 让make即使发现错误也继续执行,以便于一次性输出所有错误。
-n:输出要执行的操作,不执行
-f:设置makefile文件。默认为makefile,如果该文件不存在则查找Makefile。如果使用GNU Make则优先查找GNUmakefile。
2. 目标
make命令会创建一个特定的目标,可以将该目标作为make的一个参数。如果没有使用该参数,则make将试图创建makefile文件中的第一个目标。
3. 依赖关系
程序目标依赖于.o文件,.o文件依赖于.c和.h文件。
比如一个程序如下所示
/* main.c */ #include "a.h" /* 2.c */ #include "a.h" #include "b.h" /* 3.c */ #include "b.h" #include "c.h"
则依赖关系如下所示:
myapp : main.o 2.o 3.o main.o: main.c a.h 2.o: 2.c a.h b.h 3.o 3.c b.h c.h
如果程序要一次创建多个文件,如要创建可执行文件和用户手册,则可以使用为目标all
all:myapp myapp.help
三、makefile基础语法
1. 宏和注释
注释:make以#开头到行尾表示注释
宏:宏名 = value 表示定义一个宏。引用方法为 $(宏名)或${宏名}。宏的值可以为空
2,一个简单的makefile例子
# makefile中以#开头到行尾表示注释,所以本行是注释 #定义make为目标 all: myapp #宏定义编译器为gcc CC = gcc myapp: main.o 2.o 3.o #下一行为make规则,用tab键开头(不能用空格替代) CC -o myapp main.c 2.o 3.o main.o: main.c a.h CC -c main.c 2.o: 2.c a.h b.h CC -c 2.c 3.o: 3.c b.h c.h gcc -c 3.c