automake 规则中的依赖项检查
dependency check in automake rules
我在向 autotools 项目添加特定规则时遇到问题。
我有这个小示例项目:
project/configure.ac :
AC_INIT([myprog], [0.1], [dev@corp.com])
AM_INIT_AUTOMAKE([foreign -Wall -Werror])
AM_EXTRA_RECURSIVE_TARGETS([quality])
AC_PROG_CC
AC_SUBST([AM_CFLAGS])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile src/Makefile])
AC_OUTPUT
project/Makefile.am:
SUBDIRS = src
project/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)
每次我这样做:
$ 制作质量
valgrind 的内容是 运行,即使 "myprog" 尚未重建。
我希望它只在 myprog 比 build/src/quality 中的 quality.log 文件年轻时执行。
我做错了什么?
深入了解您生成的 project/src/Makefile
,您会看到如下内容:
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
... quality-am quality-local ...
A .PHONY
target 将始终被重制,所以是的 valgrind
将始终是 运行(我也观察到)。
编辑:
忘了这一切吧。在 运行ning 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
应该使它按您预期的方式运行。至少它对我有用。
我在向 autotools 项目添加特定规则时遇到问题。
我有这个小示例项目:
project/configure.ac :
AC_INIT([myprog], [0.1], [dev@corp.com])
AM_INIT_AUTOMAKE([foreign -Wall -Werror])
AM_EXTRA_RECURSIVE_TARGETS([quality])
AC_PROG_CC
AC_SUBST([AM_CFLAGS])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile src/Makefile])
AC_OUTPUT
project/Makefile.am:
SUBDIRS = src
project/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)
每次我这样做:
$ 制作质量
valgrind 的内容是 运行,即使 "myprog" 尚未重建。 我希望它只在 myprog 比 build/src/quality 中的 quality.log 文件年轻时执行。
我做错了什么?
深入了解您生成的 project/src/Makefile
,您会看到如下内容:
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
... quality-am quality-local ...
A .PHONY
target 将始终被重制,所以是的 valgrind
将始终是 运行(我也观察到)。
编辑:
忘了这一切吧。在 运行ning 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
应该使它按您预期的方式运行。至少它对我有用。