2013-09-30 101 views
0

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

我按照这个question来写这样的Makefile。

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

all: $(DESTS) 

$(DESTS): $(SRCS) 
    echo [email protected] 
    echo $< 

但每次我跑make all时候,echo [email protected]显示每个文件的预期,但echo $<始终显示单个文件,在我的CSV文件夹,名为items.csv

+0

你的问题的标题是inaccurate--我几乎标志着这个重复。 – Beta

+0

'make'附带一本手册,其中提供了诸如您的问题。告诉我们手册中不清楚的地方。 – reinierpost

回答

2

麻烦的是,在这条规则:

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

LUA文件取决于所有 csv文件,这不是我认为你打算的。并且因为$<扩展到第一个先决条件,您将获得每个目标的同一个(items.csv)。

试试这个:

all: $(DESTS) 

scripts/data/%.lua: docs/csv/%.csv 
    echo [email protected] 
    echo $< 
0

$ <

FIRST依赖项的名称。使用$ ^所有的依赖

$ @

是当前的目标

+0

我需要变量匹配$ @,如果$ @是'scripts/data/a.lua',那么我需要'docs/csv/a.csv',是否有这样一个变量,或者我的makefile有什么问题。 –

0

的GNU作出Automatic Variables手册页的名称是非常有用的。下面是这样说的:

[email protected]

规则的目标的文件名。如果目标是归档成员,则'[email protected]'是归档文件的名称。在具有多个目标的 模式规则中(参见模式 规则简介),'[email protected]'是导致规则的配方 运行的任何目标的名称。

$<

第一要义的名字。如果目标从隐式规则中获得了配方,这将成为隐含规则(参见隐式规则) 所添加的第一个先决条件。

顺便说一句,你可能想要写你的化妆治国模式规则代替:

%.lua : %.csv 
    <rules for making a lua from a csv>