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编写的主要内容,如果未能解决你的问题,请参考以下文章

Linux——makefile编写

Linux下makefile文件的编写问题!

GCC学习 如何编写makefile

如何编写Makefile,一份由浅入深的Makefile全攻略(转)

如何编写Makefile,一份由浅入深的Makefile全攻略(转)

makefile编写--引用