Makefile 如何在先决条件行中获取当前目标名称而不使用扩展名?
我知道,Makefile 如何在先决条件行中获取当前目标名称而不使用扩展名?,makefile,Makefile,我知道,$$@用于获取先决条件行上的目标名称,但无法使其工作以查找没有扩展名的目标名称 这就是我的意思。我有这个 foo.pdf : foo.tex pdflatex $? 但是我不想重复文件名foo。我想写像(这不起作用) 我尝试了许多其他的变化,但都没有奏效。我所拥有的make book中没有这方面的例子 你知道怎么做吗?在LinuxMint上使用Gmake3.81 或者只获取目标的foo部分,以便在依赖项行中使用它 我知道我可以写这个 TARGET = foo ${TARGET:
$$@
用于获取先决条件行上的目标名称,但无法使其工作以查找没有扩展名的目标名称
这就是我的意思。我有这个
foo.pdf : foo.tex
pdflatex $?
但是我不想重复文件名foo
。我想写像(这不起作用)
我尝试了许多其他的变化,但都没有奏效。我所拥有的make book中没有这方面的例子
你知道怎么做吗?在LinuxMint上使用Gmake3.81
或者只获取目标的foo
部分,以便在依赖项行中使用它
我知道我可以写这个
TARGET = foo
${TARGET:=.pdf} : ${TARGET:=.tex}
latex $?
但我想看看是否有可能以不同的方式进行操作。使用模式规则
# First rule in file, canonically called `all`,
# defines what gets built by default.
all: foo.pdf
# define the rule
%.pdf : %.tex
pdflatex $<
#文件中的第一条规则,通常称为“all”,
#定义默认情况下生成的内容。
全部:foo.pdf
#定义规则
%.pdf:%.tex
pdflatex$<
或者,您可以使用静态模式规则:
foo.pdf: %.pdf : %.tex
pdflatex $<
foo.pdf:%.pdf:%.tex
pdflatex$<
但我从来没有理由用这个。比我快了一分钟:)是的,我知道我能做到。在我的makefile中有很多和我一样的规则。但是这个练习的全部目的是学习如何使用
$$@
,它应该引用前提条件行中的target。我只是在寻找我提到的语法,而不是其他替代方法。是否可以像我的示例中那样直接执行?@Nasser如果您想了解何时使用。SECONDEXPANSION:
,规则是“不要”。对于任何合理的工作流,它的性能都很糟糕,最好使用include
并使用规则生成该文件的内容。
foo.pdf: %.pdf : %.tex
pdflatex $<