【问题标题】:Set include path for other makefiles设置其他 makefile 的包含路径
【发布时间】:2015-06-01 12:46:24
【问题描述】:

来自the makefile's reference page for include:

如果指定的名称不以斜杠开头,并且文件不是 在当前目录中找到,其他几个目录是 搜索。首先,您使用“-I”指定的任何目录或 搜索“--include-dir”选项(请参阅选项摘要)。然后 按以下顺序搜索以下目录(如果存在): 前缀/包含(通常是 /usr/local/include 1)/usr/gnu/include, /usr/local/include, /usr/include.

那么,有没有办法从 makefile 中设置包含路径,从而包含其他 makefile?

我不想每次调用时都必须传递--include-dir。

【问题讨论】:

    标签: makefile


    【解决方案1】:

    理论上,您应该能够将这些标志添加到 makefile 本身的 MAKEFLAGS 变量中。

    来自Communicating Options to a Sub-make:

    如果您希望在每次运行 make 时设置某些选项,例如“-k”(参见选项摘要),MAKEFLAGS 变量也很有用。您只需将 MAKEFLAGS 的值放入您的环境中。您还可以在生成文件中设置MAKEFLAGS,以指定也应该对该生成文件有效的其他标志。 (请注意,您不能以这种方式使用MFLAGS。该变量仅出于兼容性而设置;make 不会以任何方式解释您为其设置的值。)

    但快速测试似乎表明这实际上不起作用。

    我认为VPATH/vpath 可能在这里有用,但一些快速测试似乎表明它不是。

    这意味着,据我所知,如果您不想在命令行上手动指定它们,则每次运行时都可以使用 shell 脚本/函数/等。它会为您添加它们。

    尽管最后一次快速测试似乎表明尽管MAKEFLAGS 的文件设置不起作用,但环境变量路由确实起作用。所以你可以在环境中设置MAKEFLAGS 并且make应该正确使用它。

    【讨论】:

    • 好的,我会用MAKEFLAGS玩一下,看看能不能用。 vpath 用于标题包含,而不是 makefile 包含。谢谢
    • vpath 用于“先决条件”。认为 make 可能会使用它是一个很长的尝试,因为它试图构建 makefile。你也许可以让它与 makefile 中的 %.mk: %.mk ; cp $^ $@ 规则一起工作,但我没有尝试过。
    • 在 makefile 中设置 MAKEFLAGS 将不起作用,因为对 MAKEFLAGS 值的更改仅在读入所有 makefile 后才解析,而不是每次设置 MAKEFLAGS 变量时.当 make 解析了所有的 makefile 时,添加新的包含目录显然没有帮助。
    • @MadScientist 我认为可能是这种情况。我还认为,在“看看它们是否可以构建”阶段,make 可能会使用修改后的路径再次尝试,但显然这不会发生,我不确定它是否应该发生。 vpath 工作(或为此指定的特定指令)可能是处理此问题的好方法(尽管如果 %.mk : %.mk 复制目标在大多数情况下可能足够好)。
    • 是的,实现此增强的最常见想法是使用VPATH 来搜索包含的文件。我认为 Savannah 上有一个关于此的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 2013-06-11
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 2021-01-16
    相关资源
    最近更新 更多