我正在尝试检查是否使用 定义了变量ifndef/ifdef
,但我不断收到not found
执行错误。我正在使用GNU Make 3.81
,这是我所拥有的片段:
all: _images
$(call clean, .)
$(call compile, .)
@$(OPENER) *.pdf &
_images:
$(call clean, "images")
$(call compile, "images")
define clean
@rm -f ${1}/*.log ${1}/*.aux ${1}/*.pdf
endef
define compile
ifdef ${1}
dir = ${1}
else
dir = .
endif
ifdef ${2}
outdir = ${2}
else
outdir = ${1}
endif
@$(COMPILER) -output-directory ${outdir} ${dir}/*.tex
endef
以及确切的错误:
$ make
ifdef "images"
/bin/sh: 1: ifdef: not found
make: *** [_images] Error 127
编辑:
考虑到 Barmar 的评论,得出以下结论:
define 的内容是 shell 命令行,而不是 make 指令;要在定义块内的命令内换行,必须对换行符进行转义 -- 使用 \; 此外,与单行命令对应的每个块都是单独执行的,每个块在不同的 shell 执行中执行,这意味着如果打算访问下一个单行块中的变量值,定义局部变量将不起作用。
感谢 Tripleee 的出色工作。