我正在尝试在 Windows 上使用
make
命令(通过 choco 安装)。尝试使用 hello.c
运行简单的示例,其中仅包含“Hello, world”的打印。如果我只运行make hello
我将面临错误
cc hello.c -o hello
process_begin: CreateProcess(NULL, cc hello.c -o hello, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [<builtin>: hello] Error 2
所以我运行
make hello CC=gcc
,然后得到 gcc hello.c -o hello
。这里唯一的问题是我每次使用它时都会遇到它。 make 每次都会重新编译它,我不知道为什么。我尝试用 Makefile
创建 .PHONY: all
但没有结果。
更新: 生成文件
.PHONY: all
CC=gcc
您使用的是 Windows。 Windows 是一个与基于 POSIX 的系统的设计环境截然不同的环境。
特别是,在 Windows 上,二进制程序具有
.exe
扩展名,因此当编译器/链接器创建二进制文件时,它不会被命名为 foo
,而是被命名为 foo.exe
。因此,当您要求 make 构建程序 hello
并调用命令 cc -o hello hello.o
时,编译器工具链可能不会创建名为 hello
的文件,它可能会创建名为 hello.exe
的文件。因此,当您再次要求 make 构建 hello
时,进行检查并发现 hello
不存在,因此它会再次尝试,链接器再次创建 hello.exe
。等等。
听起来您所遵循的“简单示例”是设计用于 POSIX 系统而不是 Windows 的。因此,当您遵循该示例时,您必须记住将其中的所有内容都转换为 Windows。
或者,使用 WSL 或类似工具来运行您的示例。