美文网首页
make学习3-make语法笔记

make学习3-make语法笔记

作者: 有心人2021 | 来源:发表于2021-03-14 14:57 被阅读0次
gcc hello.cpp div.cpp sub.cpp add.cpp -o hello

在自己的工程中,可能需要上述这样的编译依赖,但是每次编译,都会把原来的文件都重新编译加入到目标文件中

gcc 四步骤:生成 .o 文件比较耗时(汇编阶段)
上面的编译步骤其实就是省略了编译四步骤,假设现在我改了一个文件,需要重新编译,那么每次都会重新生成 .o 文件,因此需要把上面的步骤进行拆分

gcc -c sub.cpp -o sub.o
gcc -c add.cpp -o add.o
gcc -c div.cpp -o div.o
gcc -c hello.cpp -o hello.o
gcc add.o sub.o div.o hello.o -o hello

适合需要大批量文件编译。
2.1 一个规则
make语法

目标:依赖条件
(一个tab缩进) 命令

  1. 若想要生成目标文件,会检查规则中的依赖是否存在,如果不存在,则寻找是否有完整的规则来生成该依赖条件
  2. 会检查规则中的目标是否需要更新,必须先检查它所有依赖项,依赖中任一个被更改,则目标必须更新 (原理就是检测更新时间),节省了重新编译的开支
#先决条件,找到了依赖条件,并且下面有Tab符,则执行下面的gcc,并且加入是否重新编译判断
sub.o:subcpp
  gcc -c sub.cpp -o sub.o

2.2 两个函数

src = $(wildcard *.cpp)
#找到当前目录下所有后缀为 .cpp 的文件,然后赋值给 src
obj = $(patsubst %cpp,%o,$(src))
#就是把src变量里的所有后缀为 .cpp 的文件替换成 .o 文件
make clean -n 注意加上 -n 预执行
#make clean会执行Makefile中配置的clean对应命令
如:
make clean
#makefile
clean:
    rm -rf $(obj) hello.out 

2.3 三个自动变量

$@:表示规则中的目标
$^  :表示规则中所有的依赖条件,组成一个列表,以空格隔开,如果这个列表有重复项则消除重复
$<  : 表示规则中的第一个依赖条件,如果运行在模式套用中,相当于依次取出依赖条件套用该模式规则
以这个为例
sub.o:subcpp
  gcc -c sub.cpp -o sub.o
$< 指的o:sub.cpp;$^  如果有多个依赖条件,则多个的合集;$@这里指的sub.o
src = $(wildcard *.cpp)
obj = $(patsubst %cpp,%o,$(src))

# 可改写为
hello.out:$(obj)
    gcc $^ -o $@ 

div.o:div.cpp
    gcc -c $< -o $@

add.o:add.cpp
    gcc -c $< -o $@

sub.o:sub.cpp
    gcc -c $< -o $@

hello.o:hello.cpp
    gcc -c $< -o $@

# 模式规则
# gcc -c $(src) -o $(obj)
# %o:%cpp
# gcc -c $< -o %@ 

# $(xxx) 取变量的值
clean:
    rm -rf $(obj) hello.out 

# 防止在makefile目录下有clean文件夹无法执行lean命令,https://blog.csdn.net/derkampf/article/details/70256891
.PHONY: clean

相关文章

  • make学习3-make语法笔记

    在自己的工程中,可能需要上述这样的编译依赖,但是每次编译,都会把原来的文件都重新编译加入到目标文件中 gcc 四步...

  • 20170328学习笔记

    20170328学习笔记 (1)Tsinghua University to make ability to sw...

  • Make学习笔记

    make 是一个根据指定Shell命令进行构建的工具。规定要构建哪个文件,它依赖于哪些源文件,当这些文件变动时,如...

  • Kotlin学习笔记:类和接口

    Kotlin学习笔记:概述Kotlin学习笔记:基本语法和函数Kotlin学习笔记:类和接口Kotlin学习笔记:...

  • Kotlin学习笔记:概述

    Kotlin学习笔记:概述Kotlin学习笔记:基本语法和函数Kotlin学习笔记:类和接口Kotlin学习笔记:...

  • Kotlin 学习笔记:基本语法和函数

    Kotlin学习笔记:概述Kotlin学习笔记:基本语法和函数Kotlin学习笔记:类和接口Kotlin学习笔记:...

  • Kotlin学习笔记:注解和反射

    Kotlin学习笔记:概述Kotlin学习笔记:基本语法和函数Kotlin学习笔记:类和接口Kotlin学习笔记:...

  • Kotlin学习笔记:泛型

    Kotlin学习笔记:概述Kotlin学习笔记:基本语法和函数Kotlin学习笔记:类和接口Kotlin学习笔记:...

  • Kotlin学习笔记:类型系统

    Kotlin学习笔记:概述Kotlin学习笔记:基本语法和函数Kotlin学习笔记:类和接口Kotlin学习笔记:...

  • Kotlin 学习笔记: lambda编程

    Kotlin学习笔记:概述Kotlin学习笔记:基本语法和函数Kotlin学习笔记:类和接口Kotlin学习笔记:...

网友评论

      本文标题:make学习3-make语法笔记

      本文链接:https://www.haomeiwen.com/subject/ilskcltx.html