1
我在向autotools項目添加特定規則時遇到了一些問題。automake規則中的相關性檢查
我有這樣的小項目爲例:
項目/ configure.ac:
AC_INIT([myprog], [0.1], [[email protected]])
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
項目/ Makefile.am:
SUBDIRS = src
項目/ 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)
each tim Ë我做的:
$使質量
的東西Valgrind的運行,即使「MYPROG」尚未重建。 我希望它只能在myprog比build/src/quality中的quality.log文件更年輕時執行。
我該怎麼做?
我不認爲這可以解釋它。是的,.PHONY的目標總是重新制作,但不會強制重建最新的先決條件(考慮到傳統的「全部」目標通常是.PHONY)。 OP的valgrind命令是常規目標配方的一部分;只有當該規則的目標不存在或者其先決條件已過時時才應運行。 –
@JohnBollinger在玩了更多之後,我發現你是對的。 – ldav1s
第二次嘗試,+1。我會補充說,這種事情是編寫DRY make規則的一個很好的理由,特別是在規則的配方中使用內置變量'$ @'來引用該規則的目標。 –