在 Windows 中执行 make clean 失败。

5

我希望使用mingw编译我的C语言项目。

我发现make all命令成功了,但是make clean命令失败了。 我的测试项目中只有两个文件:test.cMakefile.mak

test.c

#include <stdio.h>

int main()
{
    printf("Hello world\n");
    while (1);

    return 0;
}

Makefile.mak:

all: test.o
    gcc test.o -o test.exe

test.o: test.c
    gcc -c test.c

clean:
    @echo "clean project"
    -rm test *.o
    @echo "clean completed"
.PHONY: clean

当我运行make all -f Makefile.mak时,它成功生成了期望的test.exe可执行文件,并且我也可以运行该可执行文件。但是,当我运行make clean -f Makefile.mak时,它失败了,错误信息如下:

"clean project"
rm test *.o
process_begin: CreateProcess(NULL, rm test *.o, ...) failed.
make (e=2):
Makefile.mak:8: recipe for target 'clean' failed
make: [clean] Error 2 (ignored)
"clean completed"

为什么?

编辑:

下面的链接启示了我:MinGW makefile with or without MSYS (del vs rm)

  1. 我在我的makefile中添加了上述链接中提到的解决方法代码:
ifeq ($(OS),Windows_NT) 
RM = del /Q /F
CP = copy /Y
ifdef ComSpec
SHELL := $(ComSpec)
endif
ifdef COMSPEC
SHELL := $(COMSPEC)
endif
else
RM = rm -rf
CP = cp -f
endif

all: test.o
    gcc test.o -o test.exe

test.o: test.c
    gcc -c test.c

clean:
    @echo "clean project"
    -$(RM) test.exe *.o
    @echo "clean completed"
.PHONY: clean

它能正常工作:

"clean project"
del /Q /F test.exe *.o
"clean completed"
  1. 这提醒我可能是因为当前环境不支持 rm 命令,所以我将我的 msys 安装路径添加到环境变量中,然后它就可以工作了:
clean project
rm test.exe *.o
clean completed

1
我不认为mingw有rm命令,但我可能错了。cygwin是POSIX标准,而且有rm命令。 - activedecay
1
我建议,如果你找到了自己问题的答案,不要在问题中附上答案,而是将答案作为一个独立的回答。 - Pau Coma Ramirez
添加一行 SHELL=cmd。https://stackoverflow.com/questions/63474485/error-with-makefile-in-c-on-clean-file-not-found - Silenco Tang
2个回答

4

试一下这个:

'make clean'不起作用

在MinGW中,清理默认会运行-rm命令。但是,Windows不支持该命令。Windows使用del命令。

所以,您需要使用notepad++编辑makefile,将其更改为:

clean:
    -rm -fR $(BUILD_DIR)

To

clean:
    -del -fR $(BUILD_DIR)

0

您正在尝试删除名为“test”的文件,但该文件不存在。因此,rm命令失败。

您想要删除"test.exe",因为那是您的输出文件的名称。此外,您应该使用-f选项来执行rm,这将1)强制删除,2)如果文件不存在则不会失败:

clean:
    @echo "clean project"
    -rm -f test.exe *.o
    @echo "clean completed"

谢谢你的回答,我按照你的建议修改了 Makefile,但还是失败了... - user20881

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接