当前位置: 首页 > 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/news/161241.html

相关文章:

  • 数据结构之栈
  • 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登录认证
  • 【JavaScript】JS——Map数据类型
  • 视频监控管理平台/智能监测/检测系统EasyCVR智能地铁监控方案,助力地铁高效运营
  • 用23种设计模式打造一个cocos creator的游戏框架----(四)装饰器模式
  • MySQl int(1)、int(20) 的区别到底在哪里
  • JVM虚拟机(已整理,已废弃)
  • Spring Cache快速入门教程及案例
  • Java程序员,你掌握了多线程吗?【文末送书】
  • js取出对象数组某个属性拼接成字符串或者取出某些属性组成新的数组
  • 【C/PTA】结构体进阶练习
  • 将图像增广应用于Mnist数据集