Makefile 规则介绍

Makefile 规则介绍

1. Makefile规则如下:

 目标(target):依赖(prerequisites)
 命令(command)
 例如:

test1:test1.cc
g++ -o test1 test1.cc
test2:test2.cc
g++ -o test2 test2.cc

2. make -C dir

  功能:在读取Makefile之前改变工作目录至dir目录

3. make -n

  功能:只打印要执行的命令但不执行

4. make -s

  功能:执行命令但不显示执行的命令

5. 变量及赋值

  变量赋值使用“=”跟“:=”,使用“=”赋值时,Makefile会延迟展开,即变量的值不会马上确认,待使用到变量时根据变量的当前值重新计算。使用“:=”赋值时变量的值立即确定。变量的引用使用“$(变量名)”。

#常用变量
$@ :规则中的目标
$<:第一个依赖文件
$^:所有的依赖文件(去重)
$+: 所有依赖文件(包括重复)
$?: 所有比目标文件更新的依赖文件
$*: 文件名,不包括扩展名(在模式规则中使用)
CC: C 编译器(默认值 gcc)
CXX: C++ 编译器(默认值 g++)
CFLAGS: C 编译器的选项(如 -Wall -O2)
CXXFLAGS: C++ 编译器的选项
LDFLAGS: 链接器选项
LIBS: 需要链接的库(如 -lm -lpthread)

6. 通配符“%”的使用

  模式规则允许使用“%”来匹配文件名,例如

CC=gcc
%.o: %.c  
$(CC) -c $< -o $@

  代表对于当前目录的所有的“.c”文件使用gcc编译成对应的“.o”文件

7. 伪目标声明“.PHONY”使用

  伪目标(phony target)是那些不真正生成文件的目标,如“clean”。为了避免与同名文件冲突,可以使用.PHONY声明伪目标,例如:

.PHONY: clean  
clean:  
rm -f $(shell find -name "*.o")

  PHONY: clean:这一行声明了clean是一个伪目标。运行make clean会直接执行而不会检查文件是不是最新的

8. Makefile内置函数

 1) wildcard :查找所有符合条件的文件,例如:

SRC=$(wildcard *.cc)  

  查找当前目录下面的所有“.cc”文件,将查找结果赋值给SRC

 2) patsubst :(patsubst pattern,replacement,text):将text中符合pattern的部分替换为replacement,例如:

#定义一个变量,包含了一些文件名  
FILES = foo.c bar.c baz.h  
#使用patsubst将.c文件扩展名替换为.o  
OBJECTS = $(patsubst %.c,%.o,$(FILES))  

 3) adbpath 获取绝对目录,例如

#获取当前的绝对目录
var1 := $(abspath ./)
#获取文件test.cpp的绝对目录
var2 := $(abspath test.cpp)

9. 自定义函数 (define)

  自定义函数以“#define ”开始以“#endef”结束,例如:

define  func
    #函数内容
	@echo "fun name is:$(0)"
	@echo "param1 is :$(1)"
	@echo "param2 is :$(2)"
endef

#call func
$(call func,param1,param2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值