上一次没有说明函数是如何定义的,今天就补补啦!
1.Make脚本中函数,按照调用方式可以分为三类:
- 第一类是内置函数,即Make解释器内部定义好的函数,在任何脚本文件中可直接调用引用,调用格式:
$(<funtion> <arguments>)
或者
${<function> <arguments>}
function是函数的名称,arguments是参数,多个参数用逗号分隔,这个在上一节中已经进行了部分说明。
- 第二类是用户自定义的、带参数的函数,使用define关键字进行定义,调用格式为:
$(call <function> <arguments>)
call是调用的关键字,function代表函数的名称,arguments是函数参数,多个参数使用逗号分隔
- 第三类也是用户自定义的,但不带参数,该类函数也称之为宏,其调用格式为:
$(<function>)
既不使用call关键字,也不包含参数。
2.用户自定义的函数语法如下:
define function
各种具体命令
endef
- 函数内部使用$(n)代表调用函数时的参数,n为自然数:
$(0)代表函数名称本身;
$(1)代表第一个参数;
$(2)代表第二个参数。
示例:
define showFirstName
@echo $(1)
endef
.PHONY:name
name:
$(call showFirstName,Yuandan,Kerr)
- 这段代码中定义了函数showFirstName,其作用是将传入的第一个参数返回给调用者。
- 执行命令:make name
- 执行结果 :Yuandan
echo命令说明:
- 注:当我们用“@”字符在echo之前时,那么命令将不会被make显示出来
示例:
@echo 正在编译XXX模块...
- 当make执行时,会输出“正在编译XXX模块...”字串,但不会输出命令。
echo 正在编译XXX模块...
正在编译XXX模块...
- 如果make执行时,带入make参数 “-n”或“-just-print”,那么其只是显示命令,但是不会执行命令,这个功能有利于调试makefile。
下面介绍一些内置函数
3.foreach函数
$(foreach <var>,<list>,<text>)
这个函数的作用是:把参数<list>中的单词逐一的取出来放到参数<var>所指定的变量中,然后再执行<text>所包含的表达式。每一次<text>会返回一个字符串,循环过程中,<text>所返回的每个字符串会以空格分隔,最会当整个循环结束后,<text>所返回的每个字符串所组成的整个字符串将会是foreach函数的返回值。
所以<var>最好是一个变量名,<list>可以是一个表达式,而<text>中一般会使用<var>这个参数来依次枚举<list>中的单词。
names:=a b c d
files:=$(foreach n,$(names),$(n).o)
$(name)中的单词会被挨个取出,并存到变量“n”中,“$(n).o”每次根据“$(n)”计算出一个值,这些值以空格分隔,最后作为foreach函数的返回值,所以,$(files)的值是“a.o b.o c.o d.o”
foreach中的<var>参数是一个临时的局部变量,其作用域只在foreach函数当中。
4.if函数
$(if <condition>,<then-part>)
或者
$(if <condition>,<then-part>,<else-part>)
<condition>参数是if的表达式,如果其返回的为非空字符串,那么这个表达式就相当于返回真,则<then-part>会执行,否之<else-part>会执行。
$(if love,I am android fans,I am not)
condition是“love”,不为空,所以结果为:I am android fans
分享到:
相关推荐
6. **条件语句**:makefile支持条件判断,如`ifdef variable`、`ifndef variable`、`ifeq (var1,var2)`等,根据环境变量或自定义变量值来改变规则。 7. **多目标构建**:通过`all:`或`default:`定义默认目标,可以...
这个压缩包“Makefile学习参考资料.zip”包含了两份PDF文档,分别是“跟我一起学Makefile.pdf”和“gun_make.pdf”,很可能是关于Makefile的基础教程和GNU Make的官方文档。 在Makefile中,最重要的概念是目标...
以下详细阐述了make以及makefile的学习要点: 1. Makefile概述 Makefile是一个脚本文件,其中包含了编译和链接项目所需的各种规则。它描述了项目中哪些文件需要先编译,哪些文件需要后编译,哪些文件依赖于其他文件...
《Makefile学习手册》是一本专门针对Makefile开发的详细指南,旨在帮助读者从基础到深入地理解并掌握这一强大的构建工具。Makefile是软件工程中用于自动化编译和链接过程的重要文件,尤其在Unix/Linux环境中广泛使用...
学习Makefile不仅是掌握其语法,更重要的是理解其背后的编译和链接机制。通过合理组织Makefile,可以高效地管理和自动化复杂的构建过程。对于程序员来说,了解Makefile是走向专业化的必经之路。特别是当涉及到跨平台...
《makefile学习三件套 电子书》是一个针对makefile技术的综合学习资源,它包含了三个核心部分:《gnu make》、《GNU make中文手册》和《跟我一起写Makefile》。这些文档旨在帮助读者深入理解和掌握makefile的编写与...
### Make工具及makefile规则学习 #### 一、Make工具的功能 Make工具是一种自动化构建工具,主要用于管理和构建大型软件项目。其主要功能包括: - **避免不必要的重复编译**:通过检查文件的时间戳来确定哪些文件...
Makefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料....
* 学习曲线陡峭:Makefile 的语法非常复杂,需要花费一些时间来学习和掌握。 * 不好 debug:Makefile 的错误信息不够明确, debug 相对困难。 Makefile 是一个功能强大且灵活的自动化编译工具,在软件开发过程中...
Makefile学习笔记 Makefile是一个编译系统自动构建工具,它可以根据源文件的变化自动编译和链接对象文件,并生成执行文件。Makefile文件包含了一系列的规则和命令,这些规则和命令描述了如何从源文件生成目标文件。...
Makefile学习教程: 跟我一起写 Makefile 0 Makefile概述 0.1 关于程序的编译和链接 1 Makefile 介绍 1.1 Makefile的规则 1.2 一个示例 1.3 make是如何工作的 1.4 makefile中使用变量 1.5 让make自动推导 ...
make中文手册等 小测试: # Readme: # use: make config # use: make dir # use: make # use: make clean # use: make rebuild # use: make cleanall # use: make test # use: make
压缩包中的三份PDF文件分别对应以上三本书的内容,它们构成了一个完整的makefile学习资源库。首先,你可以通过《跟我一起写makefile》快速入门,了解makefile的基本构造和使用。然后,深入研究GNU Make Manual,掌握...
标题中提到的“Makefile教程”是指关于Makefile的学习资料,而“Makefile快速学习资料”说明本资料是为快速掌握Makefile编写的入门级教程。Makefile是Unix系统中的一个工具程序,主要用于软件开发中的自动化编译。它...
通过学习和理解`makefile`,程序员不仅可以更好地组织和管理代码,还能提升大型项目的构建效率,这对于成为一名专业的Linux C程序员来说是必不可少的技能。因此,深入学习`makefile`的编写规则和实践是每个Linux C...
这个`makefile学习用测试文件.rar`很显然是为了帮助初学者理解和掌握`Makefile`的基本概念和用法。在本文中,我们将深入探讨`Makefile`的主要组成部分,以及如何编写和使用它来编译和管理项目。 `Makefile`的核心...
总结来说,这个“makefile示例程序”是一个很好的学习资源,通过它你可以掌握如何编写和使用Makefile来自动化构建项目,提高开发效率。在实际工作中,无论是小型的个人项目还是大型的团队协作,Makefile都是一个不可...