【问题标题】:'make clean' not working'make clean' 不起作用
【发布时间】:2017-12-10 03:03:18
【问题描述】:

所以我为一个 c 程序制作了一个 makefile。出于某种原因,我的“清洁”不起作用。这是我的makefile的一点点:

CC=gcc
FLAGS=-c -Wall -I.
CLEANC=rm -rf *.o

move.o: move.c
     $(CC) $(FLAGS) move.c
/*Lot more codes like this^^^*/

clean:
    $(CLEANC)

当我在命令提示符下运行“make clean”时,我会看到以下内容:

rm -rf *.o
process_begin: CreateProcess(NULL, rm -rf *.o, ...) failed.
make (e=2): The system cannot find the file specified.
makefile:116: recipe for target 'clean' failed
make: *** [clean] Error 2

我不知道我做错了什么。我尝试将 CLEANC 更改为

rm -f *.o
rm *.o 
rm *o
rm -f *.o test.exe //test.exe is executable

但无论我尝试什么,它仍然给我同样的错误。我真的可以使用帮助。提前致谢。

【问题讨论】:

  • 无法重现。您的 Makefile 与 GNU Make 3.81 和 GNU Make 4.2.1 完美配合。
  • 什么操作系统?在命令行上尝试rm -f *.o 会发生什么?
  • 它给了我同样的错误。我正在使用安装了 MinGW 和 MSYS 的 Windows 10。 'make' 和 'make compile' 完美运行,但由于某种原因,'make clean' 总是给我同样的错误。

标签: makefile mingw msys


【解决方案1】:

从出现在您的错误输出中的CreateProcess 来看,我假设您在Windows 下运行make

这意味着没有rm 命令,你应该使用del 代替,-rf 标志也应该相应地调整。

【讨论】:

  • 我认为 Windows 的等价物是 del /Q /S *.o ,假设目标文件最终为 .o (即 mingw GCC)而不是 .obj (Visual Studio)
  • 谢谢!两个答案都有效!我认为rm 命令可以工作,因为make 工作得很好。
  • 如果你还想在windows下使用rm命令,推荐你看看cygwin(google一下)
  • 为什么我不能使用rm,虽然rm在控制台(powershell)中可用?
  • @JFFIGK 因为mingw32-make 使用cmd 而不是powershell
【解决方案2】:
OBJS   = $(addprefix $(OBJ_DIR)/,$(patsubst %.c,%.o,$(notdir $(SRCS))))
DELOBJS = $(addprefix .\obj\,$(patsubst %.c,%.o,$(notdir $(SRCS))))

.PHONY: clean
clean:
    del xxx 
    del $(DELOBJS)

del不起作用,因为Windows使用\来区分文件路径,所以你得把OBJS\path取走,也就是DELOBJS我写的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    相关资源
    最近更新 更多