我希望使用mingw编译我的C语言项目。
我发现make all
命令成功了,但是make clean
命令失败了。 我的测试项目中只有两个文件:test.c
和Makefile.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)
- 我在我的
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"
- 这提醒我可能是因为当前环境不支持
rm
命令,所以我将我的msys
安装路径添加到环境变量中,然后它就可以工作了:
clean project
rm test.exe *.o
clean completed
rm
命令,但我可能错了。cygwin
是POSIX标准,而且有rm命令。 - activedecaySHELL=cmd
。https://stackoverflow.com/questions/63474485/error-with-makefile-in-c-on-clean-file-not-found - Silenco Tang