make命令和makefile文件
- make常用的3个选项
- make -k 让make命令发现错误继续执行。
- make -n 让make命令输出将要执行的操作步骤,而不是真正执行这些操作。
- make -f <filename> 告诉make命令要执行那个文件作为makefile文件。
- makefile 文件注释
- 以#号开头
- makefile文件中的宏
- $? 当前目标所依赖的文件列表中比当前目标文件还要新的文件
- $@ 当前目标的名字
- $< 当前依赖文件的名字
- $* 不包括后缀名的当前依赖文件的名字
- 多个目标
- 在makefile文件中增加一个cleani选项来删除不需要的目标文件爱你,增加install选项来将编译成功的应用程序安装到另一个目录下。
- 内置规则
- 可以通过make -p命令输出内置规则
- 后缀和模式规则
- 要增加一个新的后缀规则,首先要在makefile文件中增加一行语句,告诉make命令这个新的后缀名。
- 用make管理函数库
- make命令用一个特殊语法来处理函数库。
- 常见形式如下:
.c.a
$(CC) -c $(CFLAGS) $< $(AR)
$(ARFLAGS) $@ $*.o
第一条规则告诉它必须编译源文件以生成目标文件。
第二条规则告诉它用ar命令将新的目标文件添加到函数库中 。
- 高级主题:makefile文件和子目录
- 大型项目有时候需要构建一个函数库的几个文件从主文件分离出来。
- 第一个方法:在子目录编写第二个makefile文件
- 第二个方法:在原来makefile文件中添加一些宏。
- 大型项目有时候需要构建一个函数库的几个文件从主文件分离出来。
- GNU make 和gcc
- make -jN 它允许make命令同时执行行N条命令 。如果有许多源文件,这个选项值得一试。
- gcc -MM 它的作用是产生一个适用于make命令的依赖关系清单。
代码示例: main.c 1.c 2.c 3.c a.h b.h c.h
makefile1
myapp: main.o 2.o 3.o
gcc -o myapp main.o 2.o 3.o
mian.o: main.c a.h
gcc -c main.c
2.o: 2.c a.h b.h
gcc -c 2.c
3.o: 2.c b.h c.h
gcc -c 3.c
makefile2
all:myapp
CC = gcc
INSTDIR = /usr/local/bin
INCLUDE = .
CFLAGS = -g -Wall -ansi
myapp: main.o 2.o 3.o
$(CC) -I$(INCLUDE) $(CFLAGS) -c main.c
2.o: 2.c a.h b.h
$(CC) -I$(INCLUDE) $(CFLAGS) -c 2.c
3.o: 3.c b.h c.h
$(CC) -I$(INCLUDE) $(CFLAGS) -c 3.c
clean:
-rm main.o 2.o 3.o
install : myapp
@if [-d $(INSTDIR) ]; \
then \
cp myapp $(INSTDIR);\
chmod a+x $(INSTDIR)/myapp;\
chmod og-w $(INSTDIR)/myapp;\
echo "Instaled in $(INSTDIR)";\
else \
echo "Sorry $(INSTDIR) does not exit ." ;\
fi