【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

相关推荐
阿沁QWQ1 天前
makefile细节说明
makefile
笑川 孙1 个月前
为什么Makefile中的clean需要.PHONY
开发语言·c++·面试·makefile·make·技术
浅安的邂逅1 个月前
Linux Makefile-概述、语句格式、编写规则、多文件编程、Makefile变量分类:自定义变量、预定义变量
linux·c语言·vim·makefile·gcc
xyd陈宇阳1 个月前
Linux 入门五:Makefile—— 从手动编译到工程自动化的蜕变
linux·运维·服务器·makefile
不摆烂选手1 个月前
Ubuntu之Makefile入门
linux·ubuntu·makefile·正点原子imx6ull学习笔记
azaz_plus1 个月前
Linux makefile的一些语法
linux·makefile
witton2 个月前
MinGW下编译ffmpeg源码时生成compile_commands.json
ffmpeg·json·makefile·mingw·调试·compile_command·remake
一朵忽明忽暗的云2 个月前
【Day9】make/makeFile如何让项目构建自动化起飞
linux·makefile·项目自动化构建工具
NullPointerExpection2 个月前
ubuntu20.04已安装 11.6版本 cuda,现需要通过源码编译方式安装使用 cuda 加速的 ffmpeg 步骤
c++·ffmpeg·makefile·cuda
半夏云流4 个月前
CMake常用命令指南(CMakeList.txt)
linux·makefile·cmake