MSYS make.exe 命令不会执行任何操作 ("Nothing to be done for...")

MSYS make.exe command won't do anything ("Nothing to be done for...")

好的,大家好。 我进行了很多搜索,看是否能找到问题的答案,但我找不到。 我在 Windows 10 上安装了最新版本的 MinGW 和 MSYS。 我根据 Zed Shaw 的指南(艰难地学习 C)创建了一个非常简单的 C 文件,它看起来像这样:

#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 源文件并使用一些默认选项,例如“-o es1”,即使没有 makefile。 问题是当我尝试使用 MSYS 的 make 编译它时,我得到了这个:

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

而且我无法以任何方式编译它。 如果我直接调用gcc编译器,这样:

gcc .\es1.c -o es1

有效。 我做错了什么?

谢谢大家

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

对于你的情况,试试这个:

make es1.exe

(我假设您在 Windows 上并且您的 makefile 设置为创建具有 .exe 扩展名的目标。)

问题可能与 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
$