【问题标题】:MSYS make.exe command won't do anything ("Nothing to be done for...")MSYS make.exe 命令不会做任何事情(“Nothing to be done for...”)
【发布时间】:2018-04-04 13:43:04
【问题描述】:

好的,大家好。 我进行了很多搜索以查看是否可以找到我的问题的答案,但我找不到。 我在 Windows 10 上安装了最新版本的 MinGW 和 MSYS。 我根据 Zed Shaw 的指南(Learn C the hard way)创建了一个非常简单的 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”,即使没有生成文件。 问题是当我尝试使用 MSYS 的 make 编译它时,我得到了这个:

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

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

gcc .\es1.c -o es1

它有效。 我做错了什么?

谢谢大家。

【问题讨论】:

    标签: c makefile mingw msys


    【解决方案1】:

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

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

    make es1.exe
    

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

    【讨论】:

    • 那么您必须向我们展示一个显示此问题的最小 makefile。
    • 不,我没有使用 make 文件。根据 Z. Shaw 的书,如果我在没有 make 文件的情况下运行“make”,它应该会自动执行“gcc es1.c -o es1”之类的操作(youtube.com/watch?v=V3rQTDagTAI at 9:55),但我的没有!
    【解决方案2】:

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

    【讨论】:

    • 不,对不起,我在这一点上失去了你: $ make foo cc foo.c -o foo 我的不这样做!它只是说:make.exe": Nothing to be done for `.\es1.c'. 即使是我第一次在 c 文件上运行编译器。
    • 编辑:是的!你是对的,问题是我在“es1.c”上调用make,正确的命令是“make es1”,没有扩展名。但是现在我遇到了另一个问题: make es1 > cc es1.c -o es1 > make.exe": cc: Command not found. 我用谷歌搜索了它,看起来问题是 MinGW 的正确命令是 gcc 而不是cc...那他们为什么要这样做?
    • cc 是 Unix 系统上标准 C 编译器的名称。您可以通过在命令行上给出CC=gcc 来覆盖它(注意大写CC)。我建议您安装完整的 cygwin 安装而不是 MSYS - 我认为 cygwin 在 Windows 上的 unixoid 行为方面具有最粗糙的边缘。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 2011-03-05
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多