首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在makefile中使用带有自动变量的函数

是为了方便地处理文件依赖关系和自动化构建过程。自动变量是makefile中预定义的变量,它们根据当前规则的上下文自动设置其值。

在makefile中,可以使用以下自动变量来引用文件名和目标名:

  • $@:表示目标文件的名称。
  • $<:表示依赖文件列表中的第一个文件的名称。
  • $^:表示所有依赖文件的列表,以空格分隔。

在使用自动变量的函数时,可以结合这些自动变量来实现更灵活的构建过程。以下是一些常用的带有自动变量的函数:

  1. wildcard函数:用于获取指定模式的文件列表。
    • 概念:通配符函数,用于获取符合指定模式的文件列表。
    • 优势:方便快捷地获取文件列表。
    • 应用场景:在构建过程中需要处理多个文件时,可以使用wildcard函数获取文件列表。
    • 腾讯云相关产品:无

示例:

代码语言:txt
复制

SRC_FILES := $(wildcard src/*.c)

OBJ_FILES := $(patsubst src/%.c, obj/%.o, $(SRC_FILES))

代码语言:txt
复制
  1. patsubst函数:用于替换指定模式的字符串。
    • 概念:模式替换函数,用于将符合指定模式的字符串替换为指定的字符串。
    • 优势:方便地进行字符串替换操作。
    • 应用场景:在构建过程中需要对文件名进行替换时,可以使用patsubst函数。
    • 腾讯云相关产品:无

示例:

代码语言:txt
复制

OBJ_FILES := $(patsubst src/%.c, obj/%.o, $(SRC_FILES))

代码语言:txt
复制
  1. dir函数:用于获取文件所在目录的路径。
    • 概念:目录函数,用于获取指定文件的所在目录路径。
    • 优势:方便获取文件所在目录的路径。
    • 应用场景:在构建过程中需要获取文件所在目录的路径时,可以使用dir函数。
    • 腾讯云相关产品:无

示例:

代码语言:txt
复制

OBJ_DIR := $(dir $(OBJ_FILES))

代码语言:txt
复制
  1. notdir函数:用于获取文件名部分。
    • 概念:文件名函数,用于获取指定文件的文件名部分。
    • 优势:方便获取文件名部分。
    • 应用场景:在构建过程中需要获取文件名部分时,可以使用notdir函数。
    • 腾讯云相关产品:无

示例:

代码语言:txt
复制

OBJ_NAMES := $(notdir $(OBJ_FILES))

代码语言:txt
复制
  1. subst函数:用于替换字符串。
    • 概念:字符串替换函数,用于将指定字符串替换为另一个字符串。
    • 优势:方便进行字符串替换操作。
    • 应用场景:在构建过程中需要对字符串进行替换时,可以使用subst函数。
    • 腾讯云相关产品:无

示例:

代码语言:txt
复制

SRC_FILES := $(subst .c,.o,$(SRC_FILES))

代码语言:txt
复制

这些带有自动变量的函数可以在makefile中灵活使用,以实现更高效和便捷的构建过程。请根据具体的项目需求选择适合的函数来处理文件依赖关系和构建过程。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

makefileinclude作用(makefile变量)

%.c,%.o,$(dir) ),patsubst把$(dir)变量符合后缀是.c全部替换成.o, 任何输出。...或者可以使用 obj=$(dir:%.c=%.o) 效果也是一样。 这里用到makefile替换引用规则,即用您指定变量替换另一个变量。...它标准格式是 $(var:a=b) 或 ${var:a=b} 它含义是把变量var每一个值结尾用b替换掉a 今天研究makefile时在网上看到一篇文章,介绍了使用函数...对于一个已经定义变量,可以使用“替换引用”将其值后缀字符(串)使用指定字符(字符串)替换。...使用变量替换引用将变量“foo”以空格分开所有的字尾字符“o”替换为“c”,其他部分不变。

3.1K50

如何使用MakefileUbuntu上自动执行重复任务

尽管make是为自动化软件编译而创建,但该工具设计灵活性足以使其可以自动执行几乎任何可以从命令行完成任务。本教程,我们将讨论如何重新调整make以自动执行按顺序发生重复性任务。...因此,我们应该将Makefile放在我们将要执行任务根目录,或者调用我们将要编写脚本最有意义地方。 Makefile,我们遵循特定格式。...变量 Make识别变量(或宏),它在makefile作为替换简单占位符。最好在文件顶部声明这些内容。每个变量名称都完全大写。名称后面,等号将名称分配给右侧值。...jpeg文件列表,并将它们存储一个名为JPEG变量。...结论 ---- 此时,您应该很好地了解如何使用Makefile。更具体地说,您应该知道如何使用make作为自动执行大多数过程工具。

2.3K00

使用全局变量Python函数之间传递变量

Python,你可以通过函数参数、返回值、全局变量、闭包、类属性等方式函数之间传递变量。如果你不想使用全局变量,我们可以考虑多种方法来使用,具体情况还要看实际体验。...问题背景 Python ,如果一个函数需要访问另一个函数局部变量,则需要使用全局变量。然而,使用全局变量会带来一些问题,例如:全局变量容易被意外修改,导致程序出现错误。...全局变量会使代码难以阅读和维护。全局变量会降低程序性能。因此, Python ,尽量避免使用全局变量。解决方案1、使用函数参数传递变量函数之间传递变量最简单方法是使用函数参数。...x = color[1] print (color[1]) return x​x = "#000000"x = mColor(x)mhello(x)2、使用类成员变量传递变量如果两个函数是同一个类成员函数...我们可以使用闭包来不同函数之间传递变量

9810

13.1 函数变量

函数变量 函数,我们可以看到也进行了变量使用,那函数变量函数变量到底有什么区别呢? 1.1....全局变量定义 声明函数外面的变量,可以文档任意地方使用这个变量,我们称为全局变量 关于全局变量使用方式如下 # 定义函数外部变量 name = "tom" # 直接使用全局变量 print...,也是python为了避免出现开发人员操作函数过程 # 如果不明确是否使用全局变量情况下,无意中覆盖全局变量值 # # 所以,函数使用全局变量,必须显示声明使用哪个全局变量 # 语法是:...函数变量隔离 如果函数没有通过global引入全局变量,但是函数使用了和全局变量相同名称 此时就会出现问题 name = "tom" def test(): # 这里只是想使用一下全局变量值...局部变量声明定义之前使用这个名称变量,就会出现上述错误 这是因为,函数,一旦声明变量并且赋值一个局部变量函数又没有通过 global引入同名全局变量,此时函数只会存在局部变量~

1.3K20

【C 语言】指针间接赋值 ( 直接修改 和 间接修改 指针变量 值 | 函数 间接修改 指针变量 值 | 函数 间接修改 外部变量 原理 )

文章目录 一、直接修改 和 间接修改 指针变量 值 二、函数 间接修改 指针变量 值 三、函数 间接修改 外部变量 原理 一、直接修改 和 间接修改 指针变量 值 ---- 直接修改 指针变量...值 , 就是为其赋值一个地址值 , 使用 & 取地址符 , 将变量地址赋值给指针变量 , 或者使用 malloc 函数分配内存赋值给 指针变量 ; // 将变量地址赋值给一级指针 p...间接修改 指针变量 值 ---- 函数 间接修改 指针变量 值 , 将 指向一级指针 二级指针 变量 , 传递到 函数形参 , 函数 , 使用 * 符号 , 修改 二级指针...p2 = &p; // 间接修改指针值 *p2 = 12345678; // 打印一级指针地址 printf("%d\n", p); // 函数 ,...三、函数 间接修改 外部变量 原理 ---- 如果要 修改 一级指针 值 , 必须 传入 指向 一级指针 二级指针 变量 才可以 , 传入一级指针变量 , 不能修改一级指针变量值 ; 这是因为

20.8K10

Python模块(使用模块函数变量、了解pyc文件)

模块是Python程序架构一个核心概念。(言外之意模块Python很重要) 模块就好比是工具包,要想使用过这个工具包工具,就需要导入import这个模块。...每一个以扩展名py结尾Python源代码文件都是一个模块。 模块定义全局变量函数都是模块能够提供给外界直接使用工具。...pyzxw_分隔线模块.print_line('+', 50) # 使用模块全局变量 print(pyzxw_分隔线模块.name) 图片: pyzxw_体验模块文件执行结果: 体验小结: 可以一个...Python文件定义变量或者函数, 然后另外一个文件中使用import导入这个模块, 导入之后,就可以使用 模块名.变量 或 模块名.函数 方式,使用这个模块定义变量或者函数。...将会加载.pyc文件并跳过编译这个步骤 当Python重编译时,它会自动检查源文件和字节码文件时间戳 如果你又修改了源代码,下次程序运行时,字节码将会重新自动创建 以上就是关于Python入门教程模块简单展开描述

2.5K20

PHP如何使用全局变量方法详解

使用全局变量和“global”关键字 PHP默认定义了一些“超级全局(Superglobals)”变量,这些变量自动全局化,而且能够程序任何地方中调用,比如$_GET和$_REQUEST等等。...开发过程,你可能会知道知道每一个全局变量,但大概一年之后,你可能会忘记其中至少一般全局变量,这个时候你会为自己使用那么多全局变量而懊悔不已。 那么如果我们不使用全局变量,我们该使用什么呢?...为了更加容易使用注册器,我们把它调用改成单件模式(译者注:不使用前面提到函数传递)。因为我们程序只需要使用一个注册器,所以单件模式使非常适合这种任务。...虽然这些变量都非常标准,而且在你使用也不会出什么问题,但是某些情况下,你可能同样需要使用注册器来封装它们。 一个简单解决方法就是写一个类来提供获取这些变量接口。...> 正如你看到,现在我们不再依靠任何全局变量了,而且我们完全让这些函数远离了全局变量。 结论 本文中,我们演示了如何从根本上移除代码全局变量,而相应用合适函数变量来替代。

7.2K100

PHPstrpos函数正确使用方式

首先简单介绍下 strpos 函数,strpos 函数是查找某个字符字符串位置,这里需要明确这个函数作用,这个函数得到是位置。 如果存在,返回数字,否则返回是 false。...而很多时候我们拿这个函数用来判断字符串是否存在某个字符,一些同学使用姿势是这样 // 判断‘沈唁志博客’是否存在‘博客’这个词 if (strpos('沈唁志博客', '博客')) {...echo '不存在'; } 输出了’不存在’;原因是因为 ‘沈’ ‘沈唁志博客’第 0 个位置;而 0 if 中表示了 false,所以,如果用 strpos 来判断字符串是否存在某个字符时...必须使用===false 必须使用===false 必须使用===false 重要事情说三遍,正确使用方式如下 // 判断‘沈唁志博客’是否存在‘博客’这个词 if (strpos('沈唁志博客...原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:PHPstrpos函数正确使用方式

5.1K30
领券