linux下的make

来源:互联网 发布:织梦门户网站模板源码 编辑:程序博客网 时间:2024/06/06 00:50

在Linux下写写简单的程序可以使用gcc/g++进行编译,若涉及的.c文件太多,则使用起来太麻烦,容易出错,且灵活性不高。

如:涉及文件有hello.c add.c等等

编译:gcc -o hello hello.c(未包含add.c文件)

gcc -o hello.o -c hello.c

gcc -o add.o -c add.c

gcc -o hello hello.o add.o(才可)

只是多了一个add.c文件,要是包含更多.c文件光是写命令就要耗费大量的时间。开发效率及其的低。


make 是一种能够控制编译或者重复编译软件的工具。

makefile是一个文本形式的脚本文件,其中包含一些规则告诉make编译哪些文件,怎样编译以及在什么条件下编译。

makefile规则遵循以下通用形式

target:dependency[dependency[...]]

           command

           command

           ......

每一个command的第一字符前面必须加上tab键。

举例说明:

最简单的形式

vi makefile

strat:hello.o

        gcc -o hello hello.o

hello.o:

        gcc -o hello.o hello.c

解析:start代表标号,hello.o代表依赖项,执行第一个标号,看是否有依赖项,若有则寻找此依赖项的标号,找到后即执行命令语句。(命令行输入make即可)


进一步完善makefile文件

start:hello.o

        gcc -o hello hello.o

        @echo '----------ok-----------'

hello.o

        gcc -o hello.o hello.c

clean:

        rm -f hello.o

解析:多加一个标号,可以通过命令行输入make clean,再调用此命令行。增加了@echo显示编译成功语句,为了将语句本身输出,加上@符号可以不输出命令。


更简单的使用makefile

在makefile中使用变量通过替换依赖项来完成。把变量用括号括起来,前面加上$就可以引用该变量的值,如$(varname),按习惯makefile的变量都是大写。

如:

CC = gcc

SRCS = hello.c

OBJS = hello.o

EXEC = hello

start:$(OBJS)

        $(CC) -o $(EXEC) $(OBJS)

OBJS:

       $(CC) -o $(OBJS) -c $(SRCS)

clean:

        rm -f $(OBJS)


通过使用.SUFFIXES:.c .o(告诉make代表.c和.o之间有关系)若写的是.CPP文件时,应在将.c换成.cpp

如:

OBJS = $(>SUFFIXES:.c = .o)

$@   常规的目标所对应的文件名(依赖项)

$<     规则中的第一个相关的文件名(被依赖项)  

如:

.SUFFIXES:.c .o                                                        若写的是.CPP文件时,应在将.c换成.cpp

CC = gcc

SRCS = hello.c

OBJS = $(SRCS:.c = .o)                                             若写的是.CPP文件时,应在将.c换成.cpp

EXEC = hello

start:$(OBJS)

        $(CC) -o $(EXEC) $(OBJS)

.c.o:                                                                                若写的是.CPP文件时,应在将.c换成.cpp

        $(CC) -o $@ -c $<

clean:

        rm -f $(OBJS)

在makefile文件中同时编译多和源文件

如:hello.c add.c

即:


.SUFFIXES:.c .o                                                            若写的是.CPP文件时,应在将.c换成.cpp

CC = gcc

SRCS = hello.c\

                 add.c

OBJS = $(SRCS:.c = .o)                                              若写的是.CPP文件时,应在将.c换成.cpp

EXEC = hello

start:$(OBJS)

        $(CC) -o $(EXEC) $(OBJS)

        @echo '----------ok-----------'

-c.o:                                                                                若写的是.CPP文件时,应在将.c换成.cpp

        $(CC) -o $@ -c $<

clean:

        rm -f $(OBJS)


       







1 0
原创粉丝点击