【问题标题】:Where does make's 'include' find files?make 的“包含”在哪里查找文件?
【发布时间】:2014-12-17 19:11:39
【问题描述】:

这似乎(并且可能是)显而易见,但我找不到。

make 的include 在哪里寻找要包含的文件?像这样:

# /mydir/makefile
include basemakefile

文件basemakefile 位于我不想硬编码的其他位置。更新 $PATH 对我不起作用。

编辑:我真正想要的是一个环境变量来控制它。没有PATH,但正如Etan 建议的那样,您可以使用MAKEFLAGS=-I/my/path/。你是否应该像那样滥用MAKEFLAGS 是值得怀疑的。

【问题讨论】:

    标签: makefile environment-variables


    【解决方案1】:

    Etan 的评论是问题的编辑版本的正确答案。在您的环境中执行此操作

    export MAKEFLAGS=-I/my/path
    

    这不是滥用,而是对变量MAKEFLAGS 的正常使用,在 GNU Make 手册中有介绍。

    【讨论】:

    • 我有点震惊,你可以依赖环境因素来构建功能。 (我的意思是我知道你说过你的环境非常受控制,但仍然如此。)
    • @EtanReisner 是的!非常如此。我编造了一个说法“调用 Make without a wrapper 就像骑着没有鞍的马 - 可能但很痛苦”。我总是有一个包装器,它设置所有可能对 Make 的行为有任何影响的环境,然后调用 Make,然后过滤输出(语法着色和诊断)。所有用户都必须调用包装器。
    • @EtanReisner 我必须这样做 - 我不为自己的项目编写 makefile,但作为顾问,我编写了一个可能供数百名工程师使用的系统,然后他们打电话给我为了支持。我必须放入手册,不能手动删除文件,不能在没有包装的情况下调用 Make,否则,如果你做这些事情,你最好知道你在做什么,因为我不会支持你.当您做了不应该做的事情并发生意外行为时,请清理并重新开始。
    • 啊,你之前提到过。从这个意义上说,这基本上就像把它放在 makefile 中(我认为作为一个系统是有意义的),所以在这种情况下它是完全合理的。我在考虑更多的临时环境标志使用,但我想我应该比认为你的意思更清楚。
    【解决方案2】:

    从您链接到的手册的那个部分:

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

    【讨论】:

    • 所以没有我可以设置的环境变量来控制这个?
    • 我不知道。您可能也可以在这里使用vpath/VPATH,但我不会打赌(我有一半希望它可以找到要重建的makefile及其先决条件,但随后加载失败)。
    • 哦,我想MAKEFLAGS=-I ... 算作“环境变量”。
    • 不,我也不推荐。
    • @EtanReisner 你为什么不推荐它 Etan :) 它在 GNU Make 手册中,专门讨论了在环境中分配给MAKEFLAGS,正是针对这种情况。
    猜你喜欢
    • 2014-01-09
    • 2011-05-19
    • 1970-01-01
    • 2016-09-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    相关资源
    最近更新 更多