默认的Makefile位置?

问题描述

如果这个问题有点离奇,请原谅我,我觉得自己误入歧途了。在cs50 Lecture 1和此old cs50 gdb video中,它们都使用make而不预先提供任何makefile,并且它使用多个参数调用clang。但是,当我运行make时,似乎使用了cc。 我认为这一定意味着每次运行make时都会使用认的makefile。我检查了make文档,找不到任何支持我的理论的东西。但是,online document中有一行用于gnu make

If you do not use the ‘-f’ or ‘--file’ flag,the default is to try GNUmakefile,makefile,and Makefile,in that order,and use the first of these three which exists or can be made. 

最后,它将我引向另一段内容

If make finds none of these names,it does not use any makefile. Then you must specify a goal with a command argument,and make will attempt to figure out how to remake it using only its built-in implicit rules. 

这是两个视频的屏幕截图示例。

cs50 Lecture 1

old cs50 gdb video

这是make能够做的事情吗?还是有一些诡计使我感到困惑

解决方法

Make有许多内置规则,这些规则使用许多默认变量,如果不存在任何makefile(或者如果makefile存在但不覆盖这些内置规则或变量,则使用这些默认变量) )。

但是,内置默认值始终对于C编译器使用cc,并且除了基本的-o-c外,没有为编译器提供任何标志。

但是,这些默认变量的值可以被环境变量覆盖。因此,如果确实是没有makefile存在但使用了这些额外标志的情况,则可能它们已经定义了一些环境变量,例如:

export CC=clang
export CFLAGS='....'

(我无法从您的屏幕截图中复制并粘贴标记,而且我不想重新键入,因此您必须想象它们)。

另外,请注意,他们可能已经将MAKEFILES environment variable设置为指向一个makefile或一组makefile,即使本地不存在makefile也会读取该文件。