Makefile make';s';包括';查找文件?

Makefile make';s';包括';查找文件?,makefile,environment-variables,Makefile,Environment Variables,这似乎(也许是)显而易见,但我找不到 make在哪里查找要包含的文件?像这样: # /mydir/makefile include basemakefile 文件basemakefile位于我不想硬编码的其他地方。更新$PATH对我不起作用 编辑:我真正想要的是一个环境变量来控制它。没有路径,但正如建议的那样,您可以使用MAKEFLAGS=-I/my/PATH/。您是否应该像这样滥用MAKEFLAGS是值得怀疑的。从您链接到的手册的每一部分: 如果指定的名称不以斜杠开头,并且在当前目录中找不到

这似乎(也许是)显而易见,但我找不到

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

# /mydir/makefile
include basemakefile
文件
basemakefile
位于我不想硬编码的其他地方。更新
$PATH
对我不起作用


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

从您链接到的手册的每一部分:

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


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

export MAKEFLAGS=-I/my/path

这不是滥用,这是GNU Make手册中包含的变量
MAKEFLAGS
的正常使用。

因此,我没有设置环境变量来控制它?我不知道。您可能也可以在这里使用
vpath
/
vpath
,但我不相信它(我有一半希望它可以找到要重建的makefile及其prereq,但随后无法加载)。哦,我想
MAKEFLAGS=-I…
算作一个“环境变量”。不,我也不推荐。@EtanReisner为什么不推荐它Etan:)它在GNU Make手册中,专门讨论了在环境中分配到
MAKEFLAGS
,正是针对这种情况。我有点震惊你对构建功能依赖于环境因素的看法。(我的意思是,我知道你说过你的环境非常受控制,但仍然如此。)@EtanReisner是的!非常感谢。我编造了一句谚语“没有包装的召唤就像骑没有鞍的马——可能但痛苦”。我总是有一个包装器,它设置可能对Make行为有任何影响的所有环境,然后调用Make,然后过滤输出(语法着色和诊断)。所有用户都必须调用包装器。@EtanReisner我必须这样做——我不为自己的项目编写makefiles,但作为一名顾问,我编写了一个系统,可能供数百名工程师使用,然后他们给我打电话寻求支持。我必须在手册里写上,不能手动删除文件,不能在没有包装器的情况下调用Make等等,否则,如果你做了这些事情,你最好知道你在做什么,因为我不会支持你。当你做了不该做的事情,发生了意想不到的行为时,把事情说清楚,然后重新开始。啊,你以前提到过。从这个意义上讲,这基本上就像把它放在makefile中一样(我认为它作为一个系统是有意义的),所以在这种情况下,它是完全合理的。我在考虑更多的特殊环境标志的使用,但我想我应该更清楚你的意思。