2014-02-17 45 views
2

我正在尝试编写一个make文件,该文件将从目录中的每个inkscape SVG中创建PDF。从化妆手册和各种教程,这似乎是一个模式规则是要走的路,所以我必须用于导出所有inkscape svg为pdf的make文件

%.pdf : %.svg 
     inkscape -A $*.pdf $*.svg 

我知道Inkscape的命令工作,如果我做手工。当我调用做虽然,我得到

$ make 
make: *** No targets. Stop. 

由于PDF文件不存在,我不能调用make *.pdfmake *.svg将不匹配任何目标。此外,我无法找到一种方法来放置all目标,这取决于模式。

最后一个问题;这是一个大型项目的一部分,我想递归地在这个目录中调用make,但是如果仅仅make不起作用,我应该递归地调用什么目标,以及如何执行此操作?

回答

2

你的模式是正确的,但一个模式告诉如何建立一个目标,如果你问一个。你仍然必须要求它,因为你不是这就是为什么你会得到“没有目标”的信息。

如果你想找到所有的SVG文件,并将其转换,你可以使用通配符功能:

SVGFILES := $(wildcard *.svg) 

all: $(SVGFILES:%.svg=%.pdf) 

%.pdf : %.svg 
     inkscape -A $*.pdf $*.svg 

我不太明白你的第二个问题。一旦你有了上面的内容,你可以使用普通的$(MAKE)(总是使用这个,永远不会使用make)在父makefile中来构建这些文件。

+0

谢谢,这个工程。只需将%.png更改为$ .pdf即可。是的,现在没有参数可以工作,我可以简单地调用'$(MAKE)'。谢谢。 – sirlark

+0

最后一件事;我该如何将这个目录指定为目录在父目录中的依赖关系?在处理上面的一个目录之前,我需要创建图像。 – sirlark