依赖检查automake规则

时间:2017-10-07 14:04:51

标签: makefile autotools automake

我在向autotools项目中添加特定规则时遇到了一些问题。

我有一个小例子项目:

project / configure.ac:

SUBDIRS = src

项目/ Makefile.am:

bin_PROGRAMS= myprog

myprog_SOURCES    = myprog.c

QUALITYDIR=$(builddir)/quality
QUALITY_FILE="$(QUALITYDIR)/quality.log"

quality-local: $(QUALITY_FILE)

$(QUALITY_FILE): myprog
    mkdir -p $(QUALITYDIR)
    valgrind ./myprog 2>&1 | tee $(QUALITY_FILE)

CLEANFILES =    $(QUALITY_FILE)

项目/ SRC / Makefile.am:

survey

每次我这样做:

$ make quality

即使" myprog"运行了valgrind的东西。尚未重建。 我希望只有当myprog比build / src / quality中的quality.log文件更年轻时才会执行。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

深入了解您生成的project/src/Makefile,您会看到以下内容:

.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
        ... quality-am quality-local ...

.PHONY target将始终重新制作,因此始终会运行valgrind(我也会观察到)。

编辑:

忘记这一切。在运行make -d quality之后(在完成了日志之后),我注意到了:

  Considering target file '"./quality/quality.log"'.
   File '"./quality/quality.log"' does not exist.

如此简单地改变:

QUALITY_FILE="$(QUALITYDIR)/quality.log"

QUALITY_FILE=$(QUALITYDIR)/quality.log

应该让它按照您的预期行事。至少它对我有用。