【问题标题】:(g)make: Make A depend on B so that A rebuilds if B has changed, but don't rebuild B if it's out of date wrt its dependencies(g)make: 使 A 依赖于 B,以便 A 在 B 发生变化时重建,但如果 B 的依赖关系过时,则不要重建 B
【发布时间】:2013-11-20 19:42:57
【问题描述】:

在下面查看我的 Makefile。我们的论文中有一组图表。这些图表可以使用 python 脚本自动生成。但并非所有合作者都拥有 Python 工具(或需要它们)。我想做的是添加导致这种行为的规则:

  • 需要一个明确的“制作图表”来重建图表 PDF(也由 git 跟踪)。
  • 如果图形 PDF 已过期(相对于其来源),简单的“制作”将不会尝试重新构建它们。只能重建主文档。
  • 如果任何图形 PDF 的更新晚于主文档(由于拉取或“制作图形”),则“制作”会注意到依赖关系已更改并重建文档。
  • 如果缺少图形 PDF(即使它可以通过“make graphs”生成),“make”失败也没关系。

在寻找解决方案时,我发现了“仅订购的先决条件”。但这与我想要的相反。对于仅订单的先决条件,“make”会隐含地导致“make graphs”发生,但它不会重建文档。我不希望发生“制作图表”,但我确实想重建文档。

有可能做我想做的事吗?

谢谢。

MAIN      = main

TEXFILES  = $(shell find . -name '*.tex')
BIBFILES  = $(shell find . -name '*.bib')
FIGURES   = $(shell find FIGS/ -name '*.pdf')
GRAPHS    = $(shell find GRAPHS/ -name '*.py' | sed -e 's/py/pdf/')

LATEX     = pdflatex
BIBTEX    = bibtex


default: $(MAIN).pdf

$(MAIN).pdf: $(FIGURES) $(TEXFILES) $(BIBFILES)
    $(LATEX) -output-format=pdf $(MAIN)
    $(BIBTEX) $(MAIN)
    $(LATEX) -output-format=pdf $(MAIN)
    $(LATEX) -output-format=pdf $(MAIN)

$(MAIN).ps: $(MAIN).pdf
    pdf2ps $(MAIN).pdf $(MAIN).ps

graphs: $(GRAPHS)

GRAPHS/%.pdf: GRAPHS/%.py
    cd GRAPHS; python2 $*.py; cd -

clean:
    rm -f *~ *.aux *.log *.bbl *.blg *.brf $(MAIN).dvi $(MAIN).ps $(MAIN).pdf

【问题讨论】:

    标签: makefile dependencies gnu-make


    【解决方案1】:

    我认为您所要做的就是确保 make 不知道如何重建图形,除非请求了 graphs 目标。这样的事情就足够了:

    .PHONY: graphs
    graphs: $(GRAPHS)
    
    ifeq ($(filter graphs,$(MAKECMDGOALS)),graphs)
    GRAPHS/%.pdf: GRAPHS/%.py
            cd GRAPHS; python2 $*.py; cd -
    endif
    

    【讨论】:

      猜你喜欢
      • 2015-08-08
      • 1970-01-01
      • 2020-04-11
      • 2014-03-29
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 2017-04-06
      相关资源
      最近更新 更多