Makefile编写
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Makefile编写相关的知识,希望对你有一定的参考价值。
对于多个.c文件来说编译比较麻烦,在这里我就给大家介绍一下makefile的编写。
Makefile 有三个非常有用的变量:[email protected],$^,$<。其意义为:
[email protected]:目标文件
$^:所有的依赖文件
$<:第一个依赖文件
.c.o:表示所有的.o文件都依赖.c文件
这样Makefile就可以简化成如下:
##################################################
# Makefile example #
##################################################
CFLAGS += -I/usr/include/mysql -L/usr/lib64/mysql/
CC_FLAG = -g -O -Wall
DFLAGS += lmysqlclient
SUBSTR=server
OBJS =Main.o Info.o Change.o Process.o CryPtion.o Md5.o Request.o \
Journal.o DevInfodb.o
all:$(SUBSTR)
$(SUBSTR) : $(OBJS)
$(CC) -o [email protected] $^ $(CFLAGS) $(LDFLAGS)
%.o : %.c
$(CC) -c $< [email protected]
.PHONY : clean
clean :
@echo "Removing linked and compiled files......"
-rm -rf $(OBJS) $(SUBSTR)
##################################################
-Wall: 输出所有的警告信息。
-O: 在编译时进行优化。
-g: 表示编译debug版本。
.PHONY意思表示clean是一个伪目标。而在rm命令前面加了一个小减号的 意思就是,也许某些文件出现问题,但不要管,继续做后面的事。当然,clean的规则不要 放在文件的开头,不然,这就会变成make的默认目标,相信谁也不愿意这样。
编译文件夹
SUBDIR = phddns-2.3.0 ez-ipupdate-3.0.10
ddns :
for dir in $(SUBDIR) ; do [ ! -d $$dir ] || $(MAKE) -C $$dir && $(MAKE) -C $$dir update || exit 1 ; done
.PHONY : clean
clean :
for dir in $(SUBDIR) ; do [ ! -d $$dir ] || $(MAKE) -C $$dir clean || exit 1 ; done
单目录通用Makefile,如下如:
##################################################
# Makefile example #
##################################################
# EXECUTABLE为目标的可执行文件名, 可以根据具体的情况对其进行修改。
EXECUTABLE := test
# 修改隐含规则中宏
CFLAGS := -Wall -O2
LDFLAGS +=
# 列出工作目录下所有以“.c”结尾的文件,以空格分隔,将文件列表赋给变量SOURCE
SOURCE := $(wildcard *.c)
# 调用patsubst函数,生成与源文件对应的“.o”文件列表
OBJS := $(patsubst %.c, %.o, $(SOURCE))
# 编译所有".o"文件生成可执行文件
all : $(EXECUTABLE)
$(EXECUTABLE) : $(OBJS)
@$(CC) $(CFLAGS) $(OBJS) -o $(EXECUTABLE)
# 声明伪目标
.PHONLY : clean
# 删除所有中间文件和目标文件
clean :
@echo "Removing linked and compiled files......"
-rm -rf $(EXECUTABLE) $(OBJS) *~
##################################################本文出自 “Linux_woniu” 博客,请务必保留此出处http://llu1314.blog.51cto.com/5925801/1965335
以上是关于Makefile编写的主要内容,如果未能解决你的问题,请参考以下文章
如何编写Makefile,一份由浅入深的Makefile全攻略(转)