【问题标题】:Post-build step for multiple targets多个目标的构建后步骤
【发布时间】:2014-04-12 00:56:59
【问题描述】:

我有一个生成文件,它有多个目标,用于以不同格式输出数据,例如make htmlmake pdfmake txt 等,我希望在使用任何这些选项时运行预构建和构建后步骤。我已对预构建步骤进行了排序,但不确定如何使构建后步骤正常工作。

.PHONY: html pdf txt pre-build post-build

pre-build:
    do-pre-build-stuff

post-build:
    do-post-build-stuff

html: data.dat
    generate-html data.dat

pdf: data.dat
    generate-pdf data.dat

txt: data.dat
    generate-txt data.dat

data.dat: pre-build
    generate-some-data > data.dat

如何让post-build 步骤在每个目标之后运行?

【问题讨论】:

    标签: makefile post-build-event


    【解决方案1】:

    不幸的是,您必须为每个规则编写不同的规则。但是您可以使用static pattern rule 使其更简单:

    html pdf txt: %: real-%
            do-post-build-stuff
    
    real-html: data.dat
            generate-html data.dat
    
    real-pdf: data.dat
            generate-pdf data.dat
    
    real-txt: data.dat
            generate-txt data.dat
    

    这会创建目标 htmlpdftxt,它们取决于 real- 版本。 real- 版本执行实际工作,然后在完成后将构建后的内容作为基本目标(htmlpdftxt)中的配方完成。

    该规则只是一个简写,因此您不必全部写出来;结果是一样的:

    html: real-html
            do-post-build-stuff
    
    pdf: real-pdf
            do-post-build-stuff
    
    txt: real-txt
            do-post-build-stuff
    

    【讨论】:

    • 这看起来很有希望,稍后会尝试。你能解释一下第一行发生了什么吗?
    • 我添加了一个指向描述静态模式规则和一些信息的 make 文档的指针。
    • 为什么do-post-build-stuff 不能成为它自己的配方并在满足先决条件后调用?
    • 怎么称呼它?规则不是函数。在完成所有先决条件后调用规则的配方(如果需要更新目标)。在这里,他们想运行 make pdf 并只构建 PDF,然后还要运行 do-post-build-stuff
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 2017-10-21
    • 1970-01-01
    • 2011-01-20
    • 2018-09-08
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多