Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
make无法识别Makefile中的目标_Makefile_Gnu Make_Makefile Errors - Fatal编程技术网

make无法识别Makefile中的目标

make无法识别Makefile中的目标,makefile,gnu-make,makefile-errors,Makefile,Gnu Make,Makefile Errors,我经历了以下几点: $ cat Makefile POLYSCRIPTER=${HOLDIR}/Manual/Tools/polyscripter UMAP=${HOLDIR}/Manual/Tools/umap all: tactics.pdf %.tex: %.stex ${POLYSCRIPTER} ${UMAP} <%.stex >%.tex tactics.pdf: %.tex pdflatex tactics.tex

我经历了以下几点:

$ cat Makefile
POLYSCRIPTER=${HOLDIR}/Manual/Tools/polyscripter
UMAP=${HOLDIR}/Manual/Tools/umap

all:    tactics.pdf

%.tex:  %.stex
        ${POLYSCRIPTER} ${UMAP} <%.stex >%.tex

tactics.pdf:    %.tex
        pdflatex tactics.tex
        bibtex tactics
        pdflatex tactics.tex
        pdflatex tactics.tex


clean:
        rm tactics.{aux,bbl,blg,log,pdf,tex,ui,uo}
$ make
make: *** No rule to make target '%.tex', needed by 'tactics.pdf'.  Stop.
$cat Makefile
polyscript=${HOLDIR}/Manual/Tools/polyscript
UMAP=${HOLDIR}/Manual/Tools/UMAP
全部:tractics.pdf
%.tex:%.stex
${polyScript}${UMAP}%.tex
tractics.pdf:%.tex
pdflatex.tex
bibtex战术
pdflatex.tex
pdflatex.tex
清洁:
rm战术。{aux、bbl、blg、log、pdf、tex、ui、uo}
$make
make:**没有规则使目标“%.tex”成为“tractics.pdf”所需的目标。停止
有一个%.tex目标。我做错了什么

这是GNU Make 4.3

更新:我想表达的是:从相应的%.stex文件创建任何%.tex文件,然后从latexing tractics.tex生成包含所有%.tex文件的tractics.pdf

更新2:我编辑了一行,学习如何引用依赖项和目标:

${POLYSCRIPTER} ${UMAP} <$< >$@                   
${polyscript}${UMAP}$@

模式规则是告诉make如何构建目标的模板。它没有为make提供一个要构建的目标列表:它只是一个构建目标的配方。所以这个模式规则:

%.tex:  %.stex
不要告诉make“到文件系统中查找所有与
%.stex
匹配的文件,这些文件可以转换为
.tex
文件并执行此操作”。它告诉make,“嘿,如果您发现出于某种原因,您想要构建一个与模式
%.tex
匹配的目标,那么这里有一种方法可以构建它”

另一方面,这:

tactics.pdf:    %.tex
这根本不是一个模式规则。模式规则的目标名称中必须有
%
。这是一个直接的显式规则,恰好依赖于名为“
%.tex”的文件。Make不知道如何构建名为
%.tex
的文件(因为没有名为字面上的
%.stex
的文件,因此上面定义的模式规则不适用)

您可以这样做:

tactics.pdf: *.tex
使用shell globbing。这更接近,因为它告诉我们生成一组要构建的
.tex
文件。但是这也不起作用,因为当您第一次运行make no
.tex
文件时!因此,此表达式将不匹配任何文件,并且您将拥有一组空的先决条件

您需要做的是(1)找到所有要生成的源文件:

STEX := $(wildcard *.stex)
TEX := $(patsubst %.stex,%.tex,$(STEX))
然后(2)将其转换为您想要构建的目标集:

STEX := $(wildcard *.stex)
TEX := $(patsubst %.stex,%.tex,$(STEX))
然后(3)列出这些目标作为PDF文件的先决条件:

tactics.pdf: $(TEX)
现在,make将使用您的模式规则来确定如何构建这些
.tex
文件