【makefile】自动化变量的简述及实例

文章目录

10. env

bash 复制代码
ubuntu=1804
GNU Make 4.1

20. 简述

百度百科

https://baike.baidu.com/item/Makefile/4619787?fr=ge_ala

bash 复制代码
makefile 文件的格式:
目标:依赖
	命令
bash 复制代码
软件编译的流程概述:
	编译:编译源代码(包括预编译等等步骤)
	链接:将编译后的代码链接到一起
PS:
	makefile的管理规则是如果形成目标文件的各类依赖中存在更新(修改日期大更新),则根据依赖关系编译/链接相关文件。
	假设形成一个test的可执行文件需要main.c的源码,如果main.c被修改,则日期会同步更新,那么test会从编译源码开始重新执行,如果main.c未被修改,则日期并不会比当前test中使用的源码更新,所以不需要重新生成test。

常用的自动化变量

bash 复制代码
$@	: 目标的完整名称
$<	: 第一个依赖文件
$^	: 所有依赖文件

30. 实例

bash 复制代码
# 指定编译器,c编译器默认为cc
CC  := gcc

# 通过源文件的名称得到所有依赖的文件名称
src     := $(shell ls *.c)
objs    := $(patsubst %.c,%.o,$(src))

# make会生成第一个碰到的target
.PHONY : all
all     :   test
# 这里为什么不直接使用test:xxx,二需要通过all转一下?
# 自己试一下就知道了,不转会导致cmd(即编译.o)默认执行,这会导致反复生成.o文件

# 生成的目标问价及其依赖,最终的目标需要多种.o依赖。
# $^ 表示所有依赖文件,每个依赖文件以空格隔开
test    :   $(objs)
    $(CC) -o $@ $^

# 目标文件需要的.o文件需要依赖.c文件。
# 由于生成.o文件的命令格式是一样的,故可以使用如下格式同一执行。
%.o :   %.c
    $(CC) -o $@ -c $<
    # -o 指定生成的文件名,-c 只编译不连接
    # $@ 指目标文件的名称,即main.o等
    # $< 指目标文件需要的依赖,即生成mian.o需要的main.c文件

.PHONY  : clean
clean:
    rm -f $(objs) test

PS:

  1. .PHONY:目标文件,指的是不生成实体文件,即"伪目标",新版make中可写可不写
  2. 上述实例未体现预编译、头文件等管理

90. 附件下载

https://download.csdn.net/download/yujianliam/88228850

相关推荐
vv_a19 天前
5规则中的命令
makefile
DieSnowK2 个月前
[项目][WebServer][Makefile & Shell]详细讲解
开发语言·c++·http·makefile·shell·项目·webserver
橘子真甜~2 个月前
Linux基础3-基础工具3(make,makefile,gdb详解)
linux·运维·服务器·makefile·make·gbd
zhangzhangkeji2 个月前
make 程序规定的 makefile 文件的书写语法
makefile·make
Betty’s Sweet2 个月前
[Linux]:环境开发工具
linux·git·vim·makefile·gdb·gcc·g++
想想吴2 个月前
15 - make 中的隐式规则概述
makefile·隐式规则
笑川 孙3 个月前
Linux | Linux开发工具链全攻略:yum、vim、gcc/g++、GDB、Makefile与git版本控制
linux·c++·git·vim·makefile·gcc·g++
DieSnowK4 个月前
[C++][CMake][嵌套的CMake]详细讲解
开发语言·c++·makefile·make·cmake·新手向·详细讲解
DieSnowK4 个月前
[C++][CMake][CMake基础]详细讲解
开发语言·c++·makefile·make·cmake·新手向·详细讲解
__xu_4 个月前
Makefile中strip函数的用法
makefile·strip