当前位置: 首页 > article >正文

[Makefile] include 关键字

在 Makefile 中,include 关键字的作用是引入其他文件的内容,通常用于将其他 Makefile 文件(通常是头文件)的内容包含到当前的 Makefile 中。这样可以实现模块化管理和代码重用。

include使用

使用 include 关键字的语法如下:

include <filename>

其中 <filename> 是要包含的文件名,可以是相对路径或绝对路径。

include 的作用主要有以下几点:

  1. 模块化管理:通过将一些公共的规则、变量或函数定义放在单独的文件中,可以提高 Makefile 的可读性和可维护性。通过在不同的 Makefile 中使用 include 来引入这些公共部分,可以实现模块化管理。

  2. 代码重用:某些项目可能存在多个相关的 Makefile,它们可能有一些公共的部分,使用 include 可以将这些公共部分抽取出来,避免重复编写相同的代码,提高代码的重用性。

  3. 定制化配置:通过 include 可以方便地引入不同的配置文件,从而实现针对不同环境或需求的定制化配置。

下面是一个简单的示例,展示了在 Makefile 中使用 include 引入另一个文件的内容:

# common.mk 文件
CC = gcc
CFLAGS = -Wall


# 其他公共规则和变量定义
COMMON_VAR := value
# 主Makefile
include common.mk

all:
    @echo "Building all targets"

clean:
    @echo "Cleaning up"

# 使用common.mk 定义的变量
target:
    @echo $(COMMON_VAR)

在这个示例中,common.mk 文件中定义了一些公共的变量和规则,主 Makefile 使用 include 引入了这些内容,从而实现了代码的重用和模块化管理。


变量定义 :=

VARIABLE_NAME := value

其中:

  • VARIABLE_NAME 是变量的名称,可以是任何合法的标识符;
  • value 是变量的值。

:= 是 Makefile 中的赋值运算符,用于将右侧的值赋给左侧的变量。相比其他赋值运算符(如 =),:= 有以下优点:

  1. 延迟求值:当使用 := 进行赋值时,变量的值不会在定义时立即求值。而是在变量被使用时才会求值,这样可以避免一些问题,例如递归变量的无限循环等。

  2. 只展开一次:使用 := 定义的变量,在被使用时只会被展开一次,而其他赋值形式可能会多次展开同一个变量,导致意外的结果。

因此,使用 := 进行赋值是比较常见的做法,特别是对于需要使用高级功能的 Makefile。

下面是一个简单的示例,展示了如何在 Makefile 中使用 := 进行变量定义:

COMMON_VAR := common_value

target1: 
    @echo "Value of COMMON_VAR in target1 is $(COMMON_VAR)"

target2:
    @echo "Value of COMMON_VAR in target2 is $(COMMON_VAR)"

在这个示例中,我们定义了一个名为 COMMON_VAR 的变量,并在两个目标中使用了它。在每个目标的执行过程中,该变量的值都是相同的。


http://www.kler.cn/a/161241.html

相关文章:

  • vscode Markdown
  • layui 文件上传前检查文件大小,后面再点上传出现重复提交的问题
  • 分布式----Ceph部署(上)
  • 【GVN】AWZ算法
  • 解耦与模块化:鸿蒙平台上的服务注册与查找机制
  • 机器学习中的分类:决策树、随机森林及其应用
  • 数据结构之栈
  • jstack java堆栈跟踪工具
  • 排序算法介绍(一)插入排序
  • TCP通讯
  • 《Linux源码趣读》| 好书推荐
  • 华清作业day41
  • springboot084基于springboot的论坛网站
  • 【Redis】Redis高级特性和应用(慢查询、Pipeline、事务、Lua)
  • git 配置多端多个账号(码云、github、gitlab)
  • 毕设:《基于hive的音乐数据分析系统的设计与实现》
  • Ardupilot开源飞控之Invensense IMUs
  • 使用bard分析视频内容
  • 加载离线镜像包:在线镜像离线为tar包、tar离线镜像包加载并根据imageId打tag
  • INFINI Easysearch 与华为鲲鹏完成产品兼容互认证
  • 【文件上传系列】No.0 利用 FormData 实现文件上传、监控网路速度和上传进度(原生前端,Koa 后端)
  • 获取MATLAB默认配色方案
  • Git初学入门指令
  • Android平板还能编程?Ubuntu本地安装code-server远程编程写代码
  • Mysql综合案例练习<1>
  • SpringbootWeb登录认证