很多新手不太清楚如何找到makefile。为了帮助大家解决这个问题,下面小编就详细讲解一下。需要的人可以从中学习,希望你能有所收获。
默认情况下,make命令将按顺序在当前目录中搜索名为“GNUmakefile”、“makefile”和“makefile”的文件,并找到该文件的解释。
在这三个文件名中,最好使用文件名‘Makefile’,因为这个文件名的第一个字符是大写的,很有目的性。最好不要用GNU make认可的‘GNUmakefile’。
目标:受抚养人_1受抚养人_2.受抚养人_n
命令_1
命令_2
命令_3
(1)makefile中的变量赋值方法
makefile中定义的变量在赋值时还有其他引用变量,makefile会一步一步展开变量。
赋值运算符前后可以有几个空格。
1运算符=
递归展开引用变量,直到找到引用变量的最新值(搜索makefile)
我爱
变量=linux
var=$(变量)
变量=魔力
all:
@echo $(var)
输出:
我喜欢魔术
2运算符:=
递归展开引用变量,只找到变量赋值前最新引用变量的值(不要搜索整个makefile)。
m :=毫米
x :=$(m)
y :=$(x)巴
x :=更高
all:
@echo $(x) $(y)
输出:
$x -稍后
$y - mm酒吧
(如果y:=更改为y=,则$y的值为:稍后的小节)
3运算符=
您可以通过=
如果变量之前没有定义过,=与=相同,后者定义了一个递归扩展的变量。然而,当变量被定义后,=只是添加字符。
如果一开始定义的变量是:=的话,那么=只能通过使用变量的当前值来添加。
如果一开始用=定义变量,那么=的行为就有点奇怪了。它不会在使用=的地方立即展开变量,而是将展开推迟到找到最后一个变量的定义,这类似于=定义变量的行为。
4操作员?=(不起作用)
指定默认值。如果变量未初始化,请为其分配默认值。例如:
ARCH=手臂
ARCH?=i386
all:
@echo $(ARCH)
输出:
手臂
ARCH=
ARCH?=i386
all:
@echo $(ARCH)
输出:
i386
(2)makefile主要预定变量
$ *目标文件名,不包括扩展名
的所有依赖文件都可能包含重复的依赖文件,以空格分隔,并按出现的顺序排列。
% HTML _ CONTENT % lt第一个相关文件的名称
$?的所有从属文件,用空格分隔,其修改日期晚于目标的创建日期。
$ @目标的全名
$由空格分隔的所有依赖文件不包含重复的依赖文件。
$%如果目标是归档成员,此变量指示目标的归档成员名称。
(3)在3)makefile中使用默认函数
1个通配符
2 patsubst
3 notdir
SUB_DIR=。/locate order_maker调度程序传输
INCLUDE=$(foreach temp,$(SUB_DIR),-I./$(temp))
SRC=$(foreach temp,$(SUB_DIR),$(通配符$(temp)/*。cpp))
OBJS=$(foreach temp,$(SRC),$(patsubst %)。cpp,%。o,$(温度)))
OBJS_LINK=$(foreach temp,$(OBJS),obj/$(patsubst %)。cpp,%。o,$(notdir $(temp)))
(4)makefile中的文件搜索路径
在makefile中,可以通过给VPATH赋值来设置规则中目标文件和依赖文件的搜索目录。
首先,搜索当前目录。如果没有找到相关文件,make将根据VPATH中给出的目录搜索VPATH,该目录对makefile中的所有文件都有效。
例如:
vpaths :=/c/Ming \
/c/明/头
您也可以使用VPATH指令。vpath和vpath的区别在于,vpath可以为不同类型的文件指定不同的搜索目录。
例如:
vpath。c /c/ming
vpath。高/中/明/头
vpath %。c表示清除vpath为% c设置的所有搜索目录。
阅读以上内容对你有帮助吗?如果您想了解更多相关知识或阅读更多相关文章,请关注行业资讯频道,感谢您的支持。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/157744.html