Make 使用 Windows 重新编译未更新的文件

问题描述 投票:0回答:1

我正在尝试在 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
c gcc makefile
1个回答
1
投票

您使用的是 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 或类似工具来运行您的示例。

© www.soinside.com 2019 - 2024. All rights reserved.