gpt4 book ai didi

makefile - 如何在不同的目录中指定 makefile 目标?

转载 作者:行者123 更新时间:2023-12-04 17:58:17 24 4
gpt4 key购买 nike

我想弄清楚为什么我不能将目标指定为位于不同的目录中。

我正在尝试从 json 文件生成一些 php 类,但我已将实际生成 php 的行更改为一个虚拟的 echo 语句,因此其他人可以复制粘贴并测试他们是否觉得非常慷慨。

还有另外两件事要添加到包含 makefile 的目录中:

  • 一个名为 PatientDbPath.json 的虚拟依赖文件
  • 一个目录叫

  • 如果我有一个包含以下内容的 makefile:
    .SUFFIXES: .php .json
    .json.php:
    echo "HelloMe" > PatientDbPath.php

    PatientDbPath.php: PatientDbPath.json

    clean:
    $(RM) PatientDbPath.php

    然后当我运行 make 时一切正常; PatientDbPath.php 已正确创建,下次运行 make 时,我收到消息 make: 'PatientDbPath.php' is up to date.
    但是,我想在单独的目录中生成 php 文件,因此我将 makefile 更新为以下内容:
    .SUFFIXES: .php .json
    .json.php:
    echo "HelloMe" > out/PatientDbPath.php

    out/PatientDbPath.php: PatientDbPath.json

    clean:
    $(RM) out/PatientDbPath.php

    一旦我这样做了,Make 就会告诉我 make: Nothing to be done for 'out/PatientDbPath.php'即使 out 目录中没有文件 PatientDbPath.php。

    所以我想可能是后缀规则的问题,我创建了第三个makefile。
    out/PatientDbPath.php: PatientDbPath.json
    echo "Whatever" > out/PatientDbPath.php

    clean:
    rm out/PatientDbPath.php

    这个效果很好,就像第一个一样。有人能看到我在第二个 makefile 中做错了什么吗?

    谢谢。

    最佳答案

    还有另一种方法可以做同样的事情,也许更优雅:

    $(JSON_FILES): out/%.php: %.json
    action

    这将为 JSON_FILES 中列出的每个文件创建一个规则。 ,所以如果它被定义 JSON_FILES= foo.json bar.json ,那么这相当于:
    out/foo.php: foo.json
    action

    out/bar.php: bar.json
    action

    然后你可以使用 $(wildcard *.json)如果您真的想要所有 .json 文件,则设置该值,或者如果规则仅对少数几个文件是唯一的,则手动设置它。

    关于makefile - 如何在不同的目录中指定 makefile 目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4138509/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com