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