Makefile学习

Posted flycc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Makefile学习相关的知识,希望对你有一定的参考价值。

最开始的时候我们编译文件:

gcc -c hello.c //生成中间文件hello.o

gcc -o hello hello.o//通过hello.o生成可执行文件hello

这种只能一次编译一个文件,如果需要编译多个文件,而且多个文件互相有依赖关系,可以借助makefile来进行编译

 

 

 

makefile的基本格式为:

一:显示规则

目标文件:依赖文件

  编译命令。。。

例如:

client:client.cpp

  g++ -o client client.cpp

上诉例子中,编译的目标文件为client,编译client所需的依赖文件为client.cpp ,通过执行g++ -o client client.cpp可以生成目标文件client

.PHONY 伪目标命令

例如

.PHONY
clean:
    rm -rf *.o client

 

二:变量

(=):替换

(+=) :追加

(:= ):恒等于

使用变量:$(变量名)

 

三:隐含规则

%.c、%.o:任意的.c、.o文件

*.c *.o : 所有的.c .o 文件

%.o:%.c
    $(GXX) -c %.c -o %.o

自动匹配需要生成的.o文件,然后通过 $(GXX) -c %.cpp 生成所需要的.o文件

 

四:通配符

$^:当前语句的依赖文件

$@:当前语句的目标文件

$<:当前语句的依赖文件的第一个文件

因此可以将上面的自动生成.o的语句改成如下所示

%.o:%.c
    $(GXX) -c $< -o $@

  

五:使用shell命令

可以使用shell命令自动查找当前文件夹下的.c 和.h文件,通过通配符实现自动化编译

SRC:=$(shell find ./ -name "*.c")
DEPS:=$(shell find ./ -name "*.h")

//每个.c文件都需要生成.o文件,此时的obj可以将查找到的.c 全部替换为.o
OBJ:= $(SRC:%.c=%.o)

$(TAR):$(OBJ)
    $(GCC) -o $@ $^

%.c:%.o $(DEPS)
    $(GCC) -c $< -o $@

  

 

以上是关于Makefile学习的主要内容,如果未能解决你的问题,请参考以下文章

gdbmake/makefile学习心得

gdbmake/makefile学习心得

Makefile学习----初步理解

Makefile文件语法

gdbmake/makefile学习心得

使用带有 NMake 样式 Makefile 的 clang-cl 无法回显