【问题标题】:Unix find with GNU Make to auto-update files使用 GNU Make 查找 Unix 以自动更新文件
【发布时间】:2012-07-30 11:37:35
【问题描述】:

我有.haml 文件,想将它们自动转换为.html 文件,并在.haml 更改时更新后者。

通用的makefile规则没问题:

%.html: %.haml
    hamlpy $< $@

但现在我需要一个规则或命令来执行以下操作:

  • templates/ 中找到所有X.haml 文件
  • 执行make X.html 命令,其中X 是相同的文件名(haml 替换为html)。

我找不到如何使用 GNU Make 或 Unix find 来执行此操作。

【问题讨论】:

    标签: makefile find haml unix


    【解决方案1】:

    如果您的所有*.haml 文件都是正确的名称(即没有空格或其他有趣的字符),您可以调用find(1)

    HAML_FILES = $(shell find templates/ -type f -name '*.haml')
    HTML_FILES = $(HAML_FILES:.haml=.html)
    
    all: $(HTML_FILES)
    
    %.html : %.haml
            hamlpy $< $@
    

    【讨论】:

      【解决方案2】:

      您可以使用 GNU make wildcard 函数在某个目录中查找文件:

      INDIR := templates
      OUTDIR := ${CURDIR}
      
      haml_files := $(wildcard ${INDIR}/*.haml)
      html_files := $(subst ${INDIR}/,${OUTDIR}/,${haml_files:.haml=.html})
      
      all : ${html_files}
      
      clean :
          rm -f ${html_files}
      
      ${OUTDIR}/%.html : ${INDIR}/%.haml
          hamlpy $< $@
      
      .PHONY : all clean
      

      INDIROUTDIR 可以在命令行上自定义,例如,使用当前目录进行输入和输入:

      $ make INDIR=. OUTDIR=.
      

      【讨论】:

      • 如果他们可以比templates更深呢?
      • 以上假设.haml文件无论多深都在一个文件夹中,例如templates/a/b/c/d/e/.
      猜你喜欢
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      • 2012-11-02
      • 1970-01-01
      • 2011-07-10
      • 2017-10-16
      • 1970-01-01
      相关资源
      最近更新 更多