我在向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文件更年轻时才会执行。我做错了什么?
答案 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
应该让它按照您的预期行事。至少它对我有用。