已知目录中未知文件的Makefile依赖项(对于DocBook)

已知目录中未知文件的Makefile依赖项(对于DocBook),makefile,dependencies,docbook,Makefile,Dependencies,Docbook,作为构建的一部分,我正在处理DocBook文件,该文件生成多个HTML文件(每章一个文件) 我想对这些HTML文件进行后处理,并将它们复制到其他地方。这些文件依赖于DocBook源,但我无法预先知道文件名(文件名也依赖于DocBook源) 我有一条规则,如果已经生成了文件,那么这种规则是有效的: www/manual/%.html: build/manual/%.html postprocess "$<" "$@" www/manual/%.html:build/manual/%.

作为构建的一部分,我正在处理DocBook文件,该文件生成多个HTML文件(每章一个文件)

我想对这些HTML文件进行后处理,并将它们复制到其他地方。这些文件依赖于DocBook源,但我无法预先知道文件名(文件名也依赖于DocBook源)

我有一条规则,如果已经生成了文件,那么这种规则是有效的:

www/manual/%.html: build/manual/%.html
   postprocess "$<" "$@"
www/manual/%.html:build/manual/%.html

后处理“$您是否试图编写类似“如果
手动
目录中根本没有文件,则运行foo命令生成它们”的规则


一个简单的可能性(一个黑客,因为我不知道高级makefile的用法,也不打算花时间学习它),就是指定的foo命令不仅创建您事先不知道的文件名,还创建一个(可能是空的)文件名是您事先知道的,然后您可以将其用作规则是否已运行的标记。

我将盲目地假设GNU Make在这里;如果不是,类似的技术应该应用于稍加修改的语法

如果是我,我会使用类似于你上面的规则,可能会使用

然后我把这个规则放在一个单独的子生成文件中

也就是说,在主生成文件中


  build:
    # do the docbook processing
    $(MAKE) -f htmlprocessmakefile

该Makefile将看到已创建的HTML文件的完整列表。

我尝试了为index.HTML添加的规则,这是可以预期的,但不会触发其他文件的后处理,只有显式命名的文件。我认为您需要两个规则:1)生成或预处理规则,这是您询问的;2)一个用于后期处理的规则,您已经有了,它使用通配符,并且后期处理目录中的所有文件。我建议,用于预处理的规则可能取决于一个已知的index.html的存在(如果index.html不存在,则该规则应生成它以及所有其他html文件).我不明白为什么创建第一条规则会影响(未更改的)第二条规则(它使用通配符,进行后期处理,…并且已经起作用了)。如果由于某些特定原因,创建和运行第一个规则确实破坏了第二个规则的行为,那么在单独的生成文件中运行第二个规则会有什么区别吗?