makefile简单使用

Makefile


2020.9.11


1,makefile规则三要素

目标,依赖项,命令

2,自动变量

< 依 赖 目 标 中 的 第 一 个 目 标 名 字 , 如 果 依 赖 目 标 是 以 模 式 ( < 依赖目标中的第一个目标名字,如果依赖目标是以模式(%)定义的,那么 <<将是符合模式的一系列的文件集。 注意,其是一个一个取出来的

$@ 规则中的目标

$^ 规则中的所有依赖

3,常用变量名称

CC 即gcc

APPFLAGS 预处理时使用的选项

CFLAGS 编译时使用的选项

LDFLAGS 链接库使用的选项

4,变量定义

variable=value;
variable:=value;

其中,=可以使用后面定义的变量,:=只能使用前面定义的变量;

5,makefile命令前缀

前缀@ 只输出命令的执行结果,出错的话停止执行;

前缀- 命令执行有错误的话,忽略错误继续执行;

无前缀 输出执行的命令以及命令执行的结果,出错的话停止执行;

6,条件判断

ifeq (arg1,arg2)   #判断括号内两个参数是否相等
	...
else
	...
endif

ifneq 和ifeq用法类似;

ifdef args
     ...
else 
     ...
endif

7,执行一个shell命令, 并将shell命令的结果作为函数的返回.

$(shell <shell command>)
或者
`<shell command>`

8, makefile和GNU约定的伪目标

all 所有目标的目标,其功能一般是编译所有目标;

clean 用于删除make创建的文件

install 安装已编译好的程序,其实就是把目标可执行文件拷贝到指定的目录中

print 列出改变过的源文件

tar 源程序打包备份

dist 创建一个压缩文件,.gz

TAGS 更新所有目标

check 或 test 一般用来测试makefile流程

9,makefile模式规则

(1) % 表示一个或任意多个字符

(2) 目标中需要有%,依赖目标也可以有%,依赖目标的%取值取决于目标的%取值;

(3) %发生在运行时;

范例:

%.o: %.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
将所有的.c生成.o文件

(4) 老式风格后缀

.c.o 等价于 %.o: %c

.SUFFIXES用来定义默认后缀表

范例:

.SUFFIXES: .c .cpp .o

10,MAKE

make -C diretory
跳转到指定目录下,执行该目录下的Makefile文件

11,patsubst

模式字符串替换函数

格式:

$(patsubst <pattern>,<replacement>,<text>)
使用text里面和pattern符合的字符串替换成replacement字符串

12,make

make <option> <macro define> <target>

make 后面可以追加选项;

make -C ../../test     # 切换当前工作目录到指定目录下,执行该目录下的Makefile文件

make 后面可以追加变量定义

make "CFLAG = -g"  # 给makefile文件添加一个变量,若变量已经存在覆盖其初始值

make 后面可以追加生成目标

make add.o  # 以add.o为目标生成文件,不指定,默认makefile第一个目标

13,添加编译优先寻找路径

# 编译时,优先在path寻找库
LDFLAG= -Wl,-rpath=/path
g++  -o file.o file.c $(LDFLAG)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值