Makefile第七课:Makefile常用符号

Makefile常用符号

前言

学习杜老师推荐的Makefile教程视频,链接。记录下个人学习笔记,仅供自己参考。

之前有转载过杜老师的从零Makefile落地算法大项目文章,感兴趣的可以看看。

本课程主要讲解Makefile中的常用符号。

1 =

  • 简单的赋值运算符
  • 用于将右边的值分配给左边的变量
  • 如果在后面的语句中重新定义了该变量,则将使用新的值

示例如下:

HOST_ARCH   = aarch64
TARGET_ARCH = $(HOST_ARCH)

# 更改了变量 a
HOST_ARCH   = amd64

debug:
	@echo $(TARGET_ARCH)

输出结果:

amd64

2 :=

  • 立即赋值运算符
  • 用于在定义变量时立即求值
  • 该值在定义后不再更改
  • 即使在后面的语句中重新定义了该变量

示例如下:

HOST_ARCH   := aarch64
TARGET_ARCH := $(HOST_ARCH)

# 更改了变量 a
HOST_ARCH := amd64

debug:
	@echo $(TARGET_ARCH)

输出结果:

aarch64

3 ?=

  • 默认赋值运算符
  • 如果该变量已经定义,则不进行任何操作
  • 如果该变量尚未定义,则求值并分配
HOST_ARCH  = aarch64
HOST_ARCH ?= amd64

debug:
	@echo $(HOST_ARCH)

输出如下:

aarch64

4 累加 +=

示例如下:

include_paths := src

CXXFLAGS := -m64 -fPIC -g -O0 -std=c++11 -w -fopenmp

CXXFLAGS += $(include_paths)

debug :
	@echo $(CXXFLAGS)

输出如下:

-m64 -fPIC -g -O0 -std=c++11 -w -fopenmp src

5 \

  • 续行符

示例如下:

LDLIBS := cudart opencv_core \
          gomp nvinfer protobuf cudnn pthread \
          cublas nvcaffe_parser nvinfer_plugin 

6 * 与 %

6.1 *

*:通配符表示匹配任意字符串,可以用在目录或文件名中

*.o: *.cpp
    g++ -c $< -o $@

上面的规则表示将所有的.cpp文件编译成对应的.o文件

6.2 %

%:通配符表示模式匹配,只能用在目标中,它可以匹配一部分字符,表示一类文件

%.o: %.cpp
    g++ -c $< -o $@

上面的规则表示将所有的.cpp文件编译成对应的.o文件,其中%表示与.cpp文件同名的部分

6.3 区别

*%区别(from ChatGPT)

  • *匹配的范围更广,可以匹配任意长度的字符串,因此它的匹配粒度更粗
  • %匹配的范围更窄,只匹配一个单词,因此它的匹配粒度更细

举个例子,假设我们有两个文件:

src/foo.c
src/bar.c

我们可以使用通配符*来匹配这两个文件:

*.c

这个模式可以匹配所有以.c结尾的文件,包括src/foo.csrc/bar.c

而如果我们要匹配以src/开头,以.c结尾的文件,可以使用通配符%

src/%.c

这个模式可以匹配以src/开头,以.c结尾的文件,但是只匹配一个单词,也就是%只能匹配文件名中的单个单词,不能匹配多个单词。

综上所述,通配符*%都可以用于匹配一定规则的字符串,只是匹配的粒度不同,具体使用时需要根据实际情况选择合适的通配符。

总结

本次课程掌握了Makefile中常见的符号如:=+=\%

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱听歌的周童鞋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值