好的,大家好。 我搜索了很多,看看能否找到我的问题的答案,但我不能。 我在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
有效。 我做错了什么?
谢谢大家。
答案 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
foo
和foo.exe
似乎是cygwin的同义词。
user@dogbert ~/foo
$ make foo
make: foo is up to date
user@dogbert ~/foo
$