makefile中的curdir函数
make makefile 的参数

make makefile 的参数make是一个常用的构建工具,用于自动化编译和构建软件项目。
makefile是make工具的配置文件,用于描述项目的构建规则和依赖关系。
本文将介绍makefile的参数,包括常用的参数及其用法。
一、常用参数及其用法1. -f 文件名:指定makefile的文件名,默认为"makefile"或"Makefile"。
通过该参数,可以使用其他名称的makefile文件。
2. -C 目录:指定make命令的工作目录。
在执行make命令时,会切换到指定的目录,并在该目录下查找makefile文件进行构建。
3. -n:显示执行make命令时的操作,但不实际执行。
通过该参数,可以预览make命令的执行过程,检查构建规则是否正确。
4. -p:显示make命令的内置变量和规则。
通过该参数,可以查看make命令的内部工作机制,了解makefile文件的编写规则和使用方法。
5. -B:强制重新构建目标文件。
通过该参数,可以忽略文件的时间戳,强制重新执行构建规则,生成新的目标文件。
6. -j 并发数:指定make命令的并发执行数。
通过该参数,可以提高构建速度,同时执行多个任务。
7. -s:静默模式,不显示执行的命令。
通过该参数,可以减少输出信息,使构建过程更加清晰。
二、makefile的构建规则makefile由一系列构建规则组成,每个规则定义了目标文件、依赖文件和构建命令。
make命令根据构建规则,自动判断需要更新的文件,并执行相应的构建命令。
构建规则的基本格式如下:目标文件: 依赖文件构建命令其中,目标文件是要生成的文件,依赖文件是目标文件依赖的文件,构建命令是生成目标文件的命令。
构建规则中的目标文件和依赖文件可以是文件名,也可以是变量。
通过使用变量,可以提高makefile的可维护性和灵活性。
构建命令可以是任意的Shell命令,包括编译、链接、拷贝等操作。
NDS开发入门教程-MakeFile文件解析

Makefile文件解析在我写教程之前,我先感谢一下libnds的开发人员以及维护人员。
他们给我们提供了十分方便的开发库libnds,让我们能够更加快捷简单的开发NDS程序。
下面我们进入正题。
注:以下绿色为文件的原注释,紫色是我后来添加的注释方便大家理解。
#---------------------------------------------------------------------------------.SUFFIXES:#---------------------------------------------------------------------------------ifeq ($(strip $(DEVKITARM)),)$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM")endifinclude $(DEVKITARM)/ds_rules#---------------------------------------------------------------------------------# TARGET 输出名称# BUILD 生成文件夹名称,对象文件以及中间文件将会被放在这个文件夹中。
# SOURCES 包含源文件的目录列表# INCLUDES 包含外部头文件的目录列表# DATA 包含二进制数据的目录列表# GRAPHICS 用grit处理文件的目录列表# AUDIO 包含用mmutil来处理的文件的文件目录# SOUNDBANK_NAME maxmod生成的soundbank的名称#MUSIC 外部音频文件目录## 所有的文件必须在与项目相关的能够找到makefile文件的文件目录下。
#---------------------------------------------------------------------------------TARGET := $(notdir $(CURDIR))BUILD := buildSOURCES := sourceINCLUDES := includeMUSIC := maxmod_data#---------------------------------------------------------------------------------# 以上部分相当于编程语言中的宏定义部分,通过:=给宏定义的变量名成进行赋值# 在以下的代码中有使用到这些宏定义。
makefile 函数参数

makefile 函数参数makefile函数参数一、什么是makefile函数参数makefile是一种用于自动化编译和构建程序的工具,其中的函数参数是makefile中定义的变量。
函数参数可以用于定义规则和命令,以实现更加灵活和可定制的构建过程。
二、makefile函数参数的使用方法1. 定义函数参数在makefile中,可以通过变量的方式定义函数参数,例如:```CFLAGS = -Wall```这里,CFLAGS就是一个函数参数,用于定义编译时的选项。
2. 引用函数参数在makefile中,可以使用$(变量名)的方式引用函数参数,例如:```$(CFLAGS)```这样就可以在makefile中的规则和命令中使用函数参数了。
三、函数参数的常见用法1. 定义编译选项函数参数可以用于定义编译时的选项,例如:```CFLAGS = -Wall -O2```这里,-Wall表示显示所有警告信息,-O2表示进行优化。
通过定义函数参数,可以根据需要自定义编译选项,以满足不同的编译需求。
2. 定义目标文件函数参数可以用于定义目标文件,例如:```OBJS = main.o utils.o```这里,main.o和utils.o就是函数参数,用于定义目标文件。
通过定义函数参数,可以方便地管理多个目标文件,使得构建过程更加灵活和可定制。
3. 定义依赖关系函数参数可以用于定义依赖关系,例如:```$(OBJS): utils.h```这里,utils.h就是函数参数,用于定义目标文件与头文件的依赖关系。
通过定义函数参数,可以准确地指定依赖关系,以确保构建过程的正确性。
4. 定义命令函数参数可以用于定义命令,例如:```clean:rm -f $(OBJS)```这里,rm -f $(OBJS)就是函数参数,用于定义clean目标的命令。
通过定义函数参数,可以方便地定义各种构建命令,以满足不同的需求。
四、函数参数的注意事项1. 函数参数的作用域函数参数的作用域是局部的,只能在定义它的makefile文件中使用。
Makefile_中的常用函数及实例分析

Makefile 中的常用函数1.$(subset <from>,<to>,<text>)名称:字符串替换功能:把字符串<text>中得<from>字符串替换成<to>返回值:返回被替换过后的字符串示例:$(subst ee,EE,feet on the street)把"feet on the street"中的"ee"替换成"EE",返回结果是“fEEt on the strEEt".2.$(patsubst <pattern>,<replacement>,<text> )名称:模式字符串替换函数功能:查找<text>中的单词(单词以"空格"、"Tab"或"回车""换行"分隔)是否符合模式<pattern>,如果匹配的话,则以<replacement>替换。
这里,<pattern>可以包括通配符"%",表示任意长度的字串。
如果<replacement>中也包含“%" ,那么,<replacement>中的这个“%" 将是<pattern> 中的那个"%" 所代表的字串。
(可以用"\"来转义,以"\%" 来表示真实含义的"%" 字符)返回值:函数返回被替换过后的字符串。
示例:$(patsubst %.c,%.o,x.c.c bar.c)把字串"x.c.c bar.c" 符合模式[%.c]的单词替换成[%.o],返回结果是"x.o.o bar.o"3.$(strip <string> )名称:去空格函数——strip功能:去掉<string>字符串中开头和结尾的空字符。
makefile 获取路径

makefile 获取路径
在编译项目时,经常需要指定源文件和头文件的路径。
而makefile 则是一个非常强大的工具,可以帮助我们自动化编译过程。
本文将介绍如何在 makefile 中获取路径信息。
在 makefile 中,可以使用一些内置的变量来获取路径信息,如下所示:
- $(CURDIR):获取当前 makefile 文件所在的目录的绝对路径。
- $(SRCDIR):获取源代码所在的目录的绝对路径。
- $(INCDIR):获取头文件所在的目录的绝对路径。
可以在 makefile 中定义这些变量,例如:
CURDIR := $(shell pwd)
SRCDIR := $(CURDIR)/src
INCDIR := $(CURDIR)/include
在上面的示例中,使用 pwd 命令获取当前目录的绝对路径,并将其赋值给变量 CURDIR。
然后通过拼接字符串的方式,定义 SRCDIR 和 INCDIR 变量。
这样,在 makefile 中就可以使用这些变量来指定源文件和头文件的路径,例如:
SRC := $(wildcard $(SRCDIR)/*.c)
INC := -I$(INCDIR)
在上面的示例中,使用 wildcard 函数获取 $(SRCDIR) 目录下的所有 .c 文件,并将其赋值给变量 SRC。
然后使用 -I 参数来指定
头文件搜索路径,其中 $(INCDIR) 为头文件所在的目录的绝对路径。
总之,在 makefile 中获取路径信息是非常方便的,可以大大简化编译过程中的路径指定操作。
makefile中的notdir,wildcard和patsubst

makefile中的notdir,wildcard和patsubstnotdir,wildcard和patsubst是makefile中几个有用的函数,以前没留意过makefile中函数的用法,今天稍微看看~1、makefile里的函数makefile里的函数使用,和取变量的值类似,是以一个‘$’开始,然后是一个括号里面是函数名和需要的参数列表,多个变量用逗号隔开,像这样return = $(functionname arg1,arg2,arg3...)。
可能这里的'$'更像是从某个地址取值类似的操作。
2、wildcard使用:SRC = $(wildcard *.c ./foo/*.c)搜索当前目录及./foo/下所有以.c结尾的文件,生成一个以空格间隔的文件名列表,并赋值给SRC.当前目录文件只有文件名,子目录下的文件名包含路径信息,比如./foor/bar.c。
3、notdir使用:SRC = $(notdir wildcard)去除所有的目录信息,SRC里的文件名列表将只有文件名。
4、patsubst使用:OBJ = $(patsubst %.o %.c $(SRC))patsubst是patten substitude的缩写,匹配替代的意思。
这句是在SRC中找到所有.c 结尾的文件,然后把所有的.c换成.o。
传说中的万能makefile############################################################Generic makefile##by George Foot#email:george.foot@##Copyright(c)1997George Foot#All rights reserved.#保留所有版權##No warranty,no liability;#you use this at your own risk.#沒保險,不負責#你要用這個,你自己擔風險#You are free to modify and#distribute this without giving#credit to the original author.#你可以隨便更改和散發這個文件#而不需要給原作者什榮譽。
makefile notdir用法

makefile notdir用法Makefile中的notdir函数用于从文件路径中提取出文件名。
在Makefile中,我们经常需要处理文件路径,例如获取文件名、获取文件所在目录等,这时就可以使用notdir函数来实现。
notdir函数的语法如下:(notdir names...)其中names是一个文件路径列表,可以是变量名或者字符串。
notdir函数将会去除每个文件路径中的目录部分,只返回文件名部分。
notdir函数的使用场景非常广泛。
在实际的软件开发中,我们常常需要将源文件编译成目标文件,并将目标文件放在指定的目录中。
此时,我们可以通过notdir 函数提取源文件的文件名,然后将目标文件命名为相同的文件名,再指定目标文件的存放目录。
以下是一个示例Makefile,用来编译C源文件并将目标文件放在指定的目录中:makefile# 源文件列表SRCS := src/file1.c src/file2.c src/file3.c# 目标文件列表OBJS := (patsubst %.c, obj/%.o, (notdir (SRCS)))# 目标文件所在目录OBJ_DIR := obj# 编译参数CFLAGS := -std=c99# 目标文件编译规则(OBJ_DIR)/%.o: src/%.cmkdir -p (@D)(CC) (CFLAGS) -o @ -c <# 构建目标all: (OBJS)# 清除目标文件clean:rm -rf (OBJ_DIR).PHONY: all clean在上面的示例中,SRCS变量定义了源文件列表,包含了三个C源文件。
通过notdir函数,我们将文件路径中的目录部分去除,得到了文件名列表file1.c、file2.c和file3.c。
然后,我们使用patsubst函数将文件名列表中的.c后缀替换为.o后缀,并加上了目标文件所在目录前缀obj/,得到目标文件列表obj/file1.o、obj/file2.o和obj/file3.o。
Makefile经典教程(最掌握这部分足够---因为汇集全部精华)!!!!!!!!!!

Makefile经典教程0 Makefile概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。
这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。
特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。
因为,makefile关系到了整个工程的编译规则。
一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。
可见,makefile都成为了一种在工程方面的编译方法。
现在讲述如何写makefile的文章比较少,这是我想写这篇文章的原因。
当然,不同产商的make各不相同,也有不同的语法,但其本质都是在“文件依赖性”上做文章,这里,我仅对GNU的make进行讲述,我的环境是RedHat Linux 8.0,make的版本是3.80。
必竟,这个make是应用最为广泛的,也是用得最多的。
而且其还是最遵循于IEEE 1003.2-1992 标准的(POSIX.2)。
在这篇文档中,将以C/C++的源码作为我们基础,所以必然涉及一些关于C/C++的编译的知识,相关于这方面的内容,还请各位查看相关的编译器的文档。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
makefile中的curdir函数
Makefile中的curdir函数是一个内建函数,它用于获取当前Makefile文件所在的目录路径。
在本文中,我将逐步回答有关curdir函数的问题,包括它的作用、语法和使用方法。
1. curdir函数的作用是什么?
curdir函数可以帮助我们获取当前Makefile文件所在的目录路径。
这在构建复杂的项目时非常有用,因为有时我们需要根据当前目录的位置来执行特定的命令或设置相应的变量。
2. curdir函数的语法是什么?
curdir函数的语法非常简单,只需使用(curdir)即可。
与其他Makefile函数一样,它需要用美元符号和括号来引用。
3. 如何使用curdir函数?
使用curdir函数非常简单。
只需在需要获取当前目录路径的位置使用(curdir),它将被替换为当前Makefile文件所在的目录路径。
以下是一个示例,展示了如何使用curdir函数来获取当前目录路径:
# 当前目录路径
CUR_DIR := (curdir)
all:
echo "当前目录路径: (CUR_DIR)"
在以上示例中,(CUR_DIR)将被替换为当前Makefile文件所在的目录路径,并输出到终端。
4. curdir函数示例
下面是一个更详细的示例,展示了如何使用curdir函数进行条件判断和设置路径变量:
# 当前目录路径
CUR_DIR := (curdir)
# 设置目录路径变量
TARGET_DIR := (CUR_DIR)/build
all: create_dir
echo "目录已创建: (TARGET_DIR)"
create_dir:
# 如果目录不存在,则创建目录
if [ ! -d "(TARGET_DIR)" ]; then \
mkdir -p "(TARGET_DIR)"; \
fi
在以上示例中,我们首先使用curdir函数获取当前Makefile文件的目录路径,并将其存储在CUR_DIR变量中。
然后,我们通过将CUR_DIR和其他路径字符串进行拼接,设置了一个名为TARGET_DIR的路径变量。
在执行"all"规则时,我们调用"create_dir"规则,其中使用条件判断来检查目标目录是否存在。
如果目录不存在,则使用mkdir命令创建目录。
最后,我们将TARGET_DIR变量的值输出到终端。
通过这个示例,我们可以看到curdir函数非常实用,它可以帮助我们在Makefile中方便地获取当前目录的路径,并根据需要进行操作和设置。
结论
curdir函数是Makefile中一个非常有用的内建函数,它可以帮助我们获取当前Makefile文件所在的目录路径。
在本文中,我们详细回答了有关curdir函数的问题,包括它的作用、语法和使用方法。
通过使用curdir 函数,我们可以方便地在Makefile中根据当前目录的位置执行特定的命令或设置相应的变量。
希望这篇文章能够帮助你更好地理解和使用curdir 函数。