MSYS make.exe命令不会做任何事情("没有什么要做的......")

时间:2017-10-23 21:44:54

标签: makefile mingw msys

好的,大家好。 我搜索了很多,看看能否找到我的问题的答案,但我不能。 我在Windows 10上安装了最新版本的MinGW和MSYS。 我创建了一个非常简单的C文件,基于Zed Shaw的指南(Learn C the hard way),看起来像这样:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int distance = 666;

    printf("You are %d miles away. \n", distance);

    return 0;

}

现在,根据Shaw的指南,我应该能够使用以下命令编译文件:

make .\es1.c

它应该自动识别我正在编译C源文件并使用一些默认选项,例如&#34; -o es1&#34;,即使没有makefile也是如此。 问题是当我尝试使用MSYS编译它时,我得到了这个:

make.exe": Nothing to be done for `.\es1.c'.

我无法以任何方式进行编译。 如果我直接调用gcc编译器,就这样:

gcc .\es1.c -o es1

有效。 我做错了什么?

谢谢大家。

2 个答案:

答案 0 :(得分:1)

您需要向make命令提供目标(将要构建的内容),而不是构建的依赖项。 make工具总是将非生成的源文件视为最新的,因为根据定义,没有任何内容可以构建它们。

在你的情况下,试试这个:

make es1.exe

(我假设您使用的是Windows,并且您的makefile已设置为创建具有.exe扩展名的目标。)

答案 1 :(得分:0)

问题可能在于Unix构建工具与Windows程序执行的精神分裂相互作用:

user@dogbert ~/foo
$ echo "int main() { return 0; }" > foo.c

user@dogbert ~/foo
$ cat foo.c
int main() { return 0; }

到目前为止一切顺利。现在就做 - 不需要makefile。

user@dogbert ~/foo
$ make foo
cc     foo.c   -o foo

虽然目标名为foo,但foo.exe已成名。

user@dogbert ~/foo
$ ls
foo.c  foo.exe

user@dogbert ~/foo
$ ./foo

user@dogbert ~/foo
$ ./foo.exe

foofoo.exe似乎是cygwin的同义词。

user@dogbert ~/foo
$ make foo
make: foo is up to date

user@dogbert ~/foo
$