【问题标题】:Makefile use as an adapter to another build systemMakefile 用作另一个构建系统的适配器
【发布时间】:2016-01-16 00:10:39
【问题描述】:

我需要创建一个 Makefile 用作另一个构建系统的适配器,该系统接受任何目标目标并将接收到的目标名称作为参数传递给调用的 shell 命令。这是我所拥有的:

OTHER_BUILD_SYSTEM = other_build_system
$@:
    $(shell $(OTHER_BUILD_SYSTEM $@))

但要抱怨:

No rule to make target `xyz`. Stop.

关于我如何做到这一点的任何线索?

【问题讨论】:

    标签: makefile


    【解决方案1】:

    听起来你可能想要Match-Anything Pattern Rule

    当模式规则的目标只是 ‘%’ 时,它匹配任何文件名。我们称这些规则为 match-anything 规则。它们非常有用,但 make 可能需要很长时间才能考虑它们,因为它必须将每个文件名的每个此类规则都考虑为目标或先决条件。

    你也不希望$(shell) 出现在配方中。直接把你想运行的shell命令放在那里就行了。

    OTHER_BUILD_SYSTEM = other_build_system
    %:
        $(OTHER_BUILD_SYSTEM $@)
    

    shell function 是在非配方上下文中用于运行 shell 命令的 make 级别函数。

    所有人都说这似乎是一件奇怪的事情。你不能直接调用你的其他应用程序吗?或者编写一个名为make 的shell 脚本/函数来简单地执行您的其他构建工具?此外,如果此 makefile 传递了多个目标,它将调用您的其他构建工具 N 次而不是仅一次(以防万一)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多