Makefile 关于Make的几个基本问题:用数字编写报告

Makefile 关于Make的几个基本问题:用数字编写报告,makefile,Makefile,我试图在每次数据更新时重新编译报告。我有以下代码: fig1.eps : images/code/fig1.m matlab -nodesktop -nosplash -r 'run ./images/code/fig1.m' 如何匹配所有图形,如fig*.eps。我想检查所有的数据,并更新那些不是最新的 当我运行上面的命令时,它会不断地重新运行。也就是说:生成了fig1.eps。在我再次运行make之后,它应该会给我一条消息“fig1.eps是最新的。”但是它没有,脚本会重新

我试图在每次数据更新时重新编译报告。我有以下代码:

fig1.eps : images/code/fig1.m
        matlab -nodesktop -nosplash -r 'run ./images/code/fig1.m'
  • 如何匹配所有图形,如fig*.eps。我想检查所有的数据,并更新那些不是最新的

  • 当我运行上面的命令时,它会不断地重新运行。也就是说:生成了fig1.eps。在我再次运行make之后,它应该会给我一条消息“fig1.eps是最新的。”但是它没有,脚本会重新运行。为什么要这样做

  • 如何匹配所有图形,如fig*.eps。我想检查所有的数据,并更新那些不是最新的
  • 如果您正在使用GNU的
    make
    实现,那么您可以使用模式规则:

    fig%.eps : images/code/fig%.m
            matlab -nodesktop -nosplash -r 'run ./$<'
    
    但是,这两个选项中的任何一个都要求您指定要创建的所有地物。简单地说,您只需列举:

    FIGS = fig1.eps fig2.eps fig5a.eps fig17.1.eps
    
    。。。并指定数字作为默认(或其他)目标的先决条件:

    但是,使用GNU
    make
    ,如果Matlab文件按顺序排列并命名,则还可以使用通配符展开或shell命令来获得结果:

    FIGS = $(shell cd images/code && ls fig*.m | sed 's/\.m$$/.eps')
    
  • 当我运行上面的命令时,它会不断地重新运行。也就是说:生成了fig1.eps。在我再次运行make之后,它应该会给我 一条消息“fig1.eps是最新的。”但它没有更新,脚本将重新运行。 为什么要这样做
  • 很可能是因为matlab命令没有生成规则的目标。例如,它可能正在创建一个同名文件,但位于不同的目录中,或者它根本没有将其输出写入文件。可能是因为还触发了导致删除
    .eps
    文件的其他规则

    all: $(FIGS)
    
    FIGS = $(shell cd images/code && ls fig*.m | sed 's/\.m$$/.eps')