在这个Makefile语句中,百分之二的符号是什么意思?

在这个Makefile语句中,百分之二的符号是什么意思?,makefile,Makefile,我在Makefile中遇到了这行代码。我一直努力想找到一个解释,但还是找不到。如果你有线索,有人能给你一个提示吗?特别是,符号%=在这个Makefile语句中是什么意思 ifndef VARA VARB := $(CURDIR:/Dev/home/ajhome/%=/home/%) export VARA:= $(VARB) endif 提前感谢很多 不应被理解为%=,%和=具有不同的功能。这是一种模式替代: $(VARNAME:pattern1=pattern2) %是模式

我在Makefile中遇到了这行代码。我一直努力想找到一个解释,但还是找不到。如果你有线索,有人能给你一个提示吗?特别是,符号%=在这个Makefile语句中是什么意思

ifndef VARA
    VARB := $(CURDIR:/Dev/home/ajhome/%=/home/%)
    export VARA:= $(VARB)
endif

提前感谢很多

不应被理解为
%=
%
=
具有不同的功能。这是一种模式替代:

$(VARNAME:pattern1=pattern2)
%
是模式中的占位符。例如,这通常用于(例如)从源文件获取对象文件的名称

SRCS = foo.c bar.c
OBJS = $(SRCS:%.c=%.o)

# $(OBJS) is foo.o bar.o

在您的情况下,它将使用
$(CURDIR)
中的目录,并用
/Dev/home/ajhome/
替换开头的
/home/
。好吧,如果
$(CURDIR)
是一个目录列表,它会对每个目录都这样做,但是变量名表明其中只有一个目录,所以我就这么说。

不应该被理解为
%=
%
=
有不同的功能。这是一种模式替代:

$(VARNAME:pattern1=pattern2)
%
是模式中的占位符。例如,这通常用于(例如)从源文件获取对象文件的名称

SRCS = foo.c bar.c
OBJS = $(SRCS:%.c=%.o)

# $(OBJS) is foo.o bar.o

在您的情况下,它将使用
$(CURDIR)
中的目录,并用
/Dev/home/ajhome/
替换开头的
/home/
。好吧,如果
$(CURDIR)
是一个目录列表,它会为每个目录都这样做,但是变量名表明其中只有一个目录,所以我就这样说。

多么美妙和清晰!正如所指出的,它不应该是%=,我将更新标题,使其不具有误导性。现在你知道这让我多么困惑,因为我从一开始就偏离了轨道。再次感谢您。根据我的经验,稍微常见一点的
$(SRCS:.c=.o)
也是一样的,但在开始时有一个隐式模式/
%
。多么美妙和清晰!正如所指出的,它不应该是%=,我将更新标题,使其不具有误导性。现在你知道这让我多么困惑,因为我从一开始就偏离了轨道。再次感谢您。根据我的经验,稍微常见一点的
$(SRCS:.c=.o)
也是一样的,但在开始时有一个隐式模式/
%