deepwzh的技术笔记
  • Golang
  • Python
  • Cpp
杂项
前端开发
  • 计算机网络
  • 操作系统
  • 数据库
云原生
Devops
AIGC
关于作者
  • Golang
  • Python
  • Cpp
杂项
前端开发
  • 计算机网络
  • 操作系统
  • 数据库
云原生
Devops
AIGC
关于作者
  • Cpp
  • c++ 模块
  • 类

    • 类
    • 友元
  • 开发工具

    • 开发工具
    • Vscode

      • Vscode
      • vscode 相关插件
  • 协程

    • 协程
    • test
  • 构建工具

    • 构建工具
    • Make
    • Cmake

      • Cmake
      • 常见问题
      • cmake 基本用法
      • cmake 集成 conan
      • cmake 生成器
      • cmake 库查找
  • 链接库

    • 链接库
    • 动态链接库
  • 编译器

    • 编译器
    • gcc

      • gcc
      • 常用选项
  • 包管理工具

    • 包管理工具
    • Canan

Make

概述

基本语法

条件语句

ifeq ($(CC),gcc)
  libs=$(libs_for_gcc)
else
  libs=$(normal_libs)
endif

循环语句

LIST = one two three
all:
    for i in $(LIST); do \
        echo $$i; \
    done

变量

内置变量

详见:https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html

常用的,指向当前使用的编译器,(CC)指向当前使用的编译器,(MAKE) 指向当前使用的 Make 工具

自动变量

  1. $@

$@指代当前目标,就是Make命令当前构建的那个目标。比如,make foo的 $@ 就指代 foo。

a.txt b.txt: touch $@


等同于下面的写法。

> ```bash
a.txt:
    touch a.txt
b.txt:
    touch b.txt

(2)$<

指代第一个前置条件。比如,规则为,那么<指代第一个前置条件。比如,规则为t:p1p2,那么< 就指代 p1。

a.txt: b.txt c.txt cp $< $@


等同于下面的写法。

> ```bash
a.txt: b.txt c.txt
    cp b.txt a.txt

(3)$?

指代比目标更新的所有前置条件,之间以空格分隔。比如,规则为 t: p1 p2,其中 p2 的时间戳比 t 新,

(4)$^

指代所有前置条件,之间以空格分隔。比如,规则为 t: p1 p2,那么

(5)$*

指代匹配符 % 匹配的部分, 比如 % 匹配 f1.txt 中的 f1 ,$*就表示 f1。

(6)$(@D) 和 $(@F)

$(@D) 和 $(@F) 分别指向 的目录名和文件名。比如,@的目录名和文件名。比如,@ 是 src/input.c,那么的值为,(@D)的值为src,(@F) 的值为 input.c。

(7)$(<D) 和 $(<F)

$(<D) 和 $(<F) 分别指向 $< 的目录名和文件名。

所有的自动变量清单,请看手册。下面是自动变量的一个例子。

dest/%.txt: src/%.txt @[ -d dest ] || mkdir dest cp $< $@


上面代码将 src 目录下的 txt 文件,拷贝到 dest 目录下。首先判断 dest 目录是否存在,如果不存在就新建,然后,$< 指代前置文件(src/%.txt), $@ 指代目标文件(dest/%.txt)。

## 函数

### 语法

$(function arguments)


或者

${function arguments}


### 内置函数

1. shell

files = $(shell echo "xxx")


> 要想实现执行shell命令,也可以这样实现 files != echo "xxx"

1. wildcard

files = $(wildcard src/*.txt)


1. 替换函数(subst、patsubst)

更多内容可以参考https://www.gnu.org/software/make/manual/html_node/Functions.html



Prev
构建工具