这段代码在 pmoncfg 工具的 makefile 中是什么意思?
What does this code mean in the makefile of pmoncfg tool?
BISON?= bison -y
PROG= pmoncfg
SRCS= files.c gram.y hash.c main.c mkheaders.c mkioconf.c mkmakefile.c
OBJS= files.o hash.o main.o mkheaders.o mkioconf.o mkmakefile.o pack.o
CFLAGS+=-I${.CURDIR} -I. -DYY_SKIP_YYWRAP
LEX=flex
CLEANFILES=gram.c scan.c gram.h pmoncfg.cat8
MAN= pmoncfg.8
.y.c:
${BISON} -d -o $@ $<
${PROG}: ${OBJS}
${CC} -o $@ ${OBJS} ${LIBS}
install:
cp ${PROG} ${DESTDIR}/bin
clean:
${RM} -rf ${OBJS} ${CLEANFILES} ${PROG}
".y.c: ${BISON} -d -o $@ $<" 这行是什么意思?当前文件夹中没有 .y 文件。还有 MAN 和 LEX 变量,makefile 没有使用它,either.Why 声明它们?
根据最新的隐式规则,我可以只写“${PROG}: ${OBJS} ${CC} -o $@ ${OBJS} ${LIBS}”吗?
这里的混乱来源似乎是由于 一些 目标依赖隐式规则。查看 https://github.com/kisom/pmon/tree/master/tools/pmoncfg,文件 pmoncfg.8
是手册页源(因此将通过隐式规则生成 pmoncfg.cat8
)并且 scan.l
是 Lex 文件(因此 scan.c
将使用 flex
生成,因为标准隐式规则将程序参数化以在变量 LEX
中使用)。与你写的相反,有一个文件 gram.y
用于使用 bison
.
生成 gram.c
make
的工作是找到可以从其他文件生成的文件。像 .y.c
这样的模式规则意味着如果需要 .c
文件但缺少,但是有相应的 .y
文件,这里是如何生成所需的 .c
文件。如果文件已经存在(并且比它所依赖的文件新),什么都不做。如果一个文件已经存在并且没有任何东西可以生成它,显然不需要做任何事情(如果它丢失并且没有关于如何生成它的规则,make
会发出错误信号)。
BISON?= bison -y
PROG= pmoncfg
SRCS= files.c gram.y hash.c main.c mkheaders.c mkioconf.c mkmakefile.c
OBJS= files.o hash.o main.o mkheaders.o mkioconf.o mkmakefile.o pack.o
CFLAGS+=-I${.CURDIR} -I. -DYY_SKIP_YYWRAP
LEX=flex
CLEANFILES=gram.c scan.c gram.h pmoncfg.cat8
MAN= pmoncfg.8
.y.c:
${BISON} -d -o $@ $<
${PROG}: ${OBJS}
${CC} -o $@ ${OBJS} ${LIBS}
install:
cp ${PROG} ${DESTDIR}/bin
clean:
${RM} -rf ${OBJS} ${CLEANFILES} ${PROG}
".y.c: ${BISON} -d -o $@ $<" 这行是什么意思?当前文件夹中没有 .y 文件。还有 MAN 和 LEX 变量,makefile 没有使用它,either.Why 声明它们?
根据最新的隐式规则,我可以只写“${PROG}: ${OBJS} ${CC} -o $@ ${OBJS} ${LIBS}”吗?
这里的混乱来源似乎是由于 一些 目标依赖隐式规则。查看 https://github.com/kisom/pmon/tree/master/tools/pmoncfg,文件 pmoncfg.8
是手册页源(因此将通过隐式规则生成 pmoncfg.cat8
)并且 scan.l
是 Lex 文件(因此 scan.c
将使用 flex
生成,因为标准隐式规则将程序参数化以在变量 LEX
中使用)。与你写的相反,有一个文件 gram.y
用于使用 bison
.
gram.c
make
的工作是找到可以从其他文件生成的文件。像 .y.c
这样的模式规则意味着如果需要 .c
文件但缺少,但是有相应的 .y
文件,这里是如何生成所需的 .c
文件。如果文件已经存在(并且比它所依赖的文件新),什么都不做。如果一个文件已经存在并且没有任何东西可以生成它,显然不需要做任何事情(如果它丢失并且没有关于如何生成它的规则,make
会发出错误信号)。