$<;makefiles中的$@是什么意思?

$<;makefiles中的$@是什么意思?,makefile,Makefile,我有a.csv,b.csv。。。在mydocs/csv目录中,我需要将每个文件转换为json文件 我按照这个编写了一个这样的Makefile SRCS = $(wildcard docs/csv/*.csv) DESTS = $(patsubst docs/csv/%.csv, scripts/data/%.lua, $(SRCS)) all: $(DESTS) $(DESTS): $(SRCS) echo $@ echo $< SRCS=$(通配符文档/csv/*.

我有
a.csv
b.csv
。。。在my
docs/csv
目录中,我需要将每个文件转换为json文件

我按照这个编写了一个这样的Makefile

SRCS = $(wildcard docs/csv/*.csv)
DESTS = $(patsubst docs/csv/%.csv, scripts/data/%.lua, $(SRCS))

all: $(DESTS)

$(DESTS): $(SRCS)
    echo $@
    echo $<
SRCS=$(通配符文档/csv/*.csv)
DESTS=$(patsubst docs/csv/%.csv,scripts/data/%.lua,$(SRCS))
全部:$(目的地)
$(目的地):$(目的地)
回音$@
回音$<
但是每次我运行
makeall
echo$@
都会按预期显示每个文件,但是
echo$$上的GNU make手册页非常有用。它是这样说的:

$@

规则目标的文件名。如果目标是存档成员,则“
$@
”是存档文件的名称。在一个 具有多个目标的模式规则(请参见模式简介 规则),“
$@
”是导致规则配方的任何目标的名称 待运行


$这个规则的问题在于:

$(DESTS): $(SRCS)
    ...

每个lua文件都依赖于所有csv文件,这不是我认为您想要的。由于您的问题标题不准确,我几乎将其标记为重复。
make
附带了一本手册,其中回答了您的问题。告诉我们手册中不清楚的地方。我需要与$@匹配的变量,如果$@是
scripts/data/a.lua
,那么我需要
docs/csv/a.csv
,是否存在这样的变量,或者我的makefile有什么问题。
$(DESTS): $(SRCS)
    ...
all: $(DESTS)

scripts/data/%.lua: docs/csv/%.csv 
    echo $@
    echo $<