C Makefile-如何隐藏";没有这样的文件或目录;清洁时出错?
我正在创建一个C项目作为作业。除了源文件外,它还必须包括一个Makefile,该Makefile必须使用命令“make”编译可执行的“solution”,另一个可执行的“solution.gdb”必须使用命令“make debug”遵从额外的“-g”参数。为了做到这一点,我决定创建一组单独的对象文件(“*.do”文件) 然而,“makeclean”命令必须从目录中删除所有对象和可执行文件。在仅使用一个命令(“make”或“makedebug”)之后,当我尝试使用“makeclean”命令时,会出现问题,因为它试图删除不存在的文件 错误消息示例:C Makefile-如何隐藏";没有这样的文件或目录;清洁时出错?,c,makefile,C,Makefile,我正在创建一个C项目作为作业。除了源文件外,它还必须包括一个Makefile,该Makefile必须使用命令“make”编译可执行的“solution”,另一个可执行的“solution.gdb”必须使用命令“make debug”遵从额外的“-g”参数。为了做到这一点,我决定创建一组单独的对象文件(“*.do”文件) 然而,“makeclean”命令必须从目录中删除所有对象和可执行文件。在仅使用一个命令(“make”或“makedebug”)之后,当我尝试使用“makeclean”命令时,会出
rm solution.o tree.o list.o commands.o solution.do tree.do list.do commands.do solution solution.gdb
rm: cannot remove 'solution.o': No such file or directory
rm: cannot remove 'tree.o': No such file or directory
rm: cannot remove 'list.o': No such file or directory
rm: cannot remove 'commands.o': No such file or directory
rm: cannot remove 'solution': No such file or directory
Makefile:30: recipe for target 'clean' failed
make: [clean] Error 1 (ignored)
是否需要修改“makeclean”指令,以便不显示这些错误?还是用完全不同的方式做更好
提前感谢所有的答案
生成文件:
CC = gcc
CFLAGS = -Wall -Werror -Wextra
DEBUG_CFLAGS = -g $(CFLAGS)
sources = solution.c tree.c list.c commands.c
objects = $(sources:.c=.o)
debug_objects = $(sources:.c=.do)
solution: $(objects)
$(CC) -o $@ $^
%.o: %.c
$(CC) -c $(CFLAGS) -o $@ $<
%.do: %.c
$(CC) -c $(DEBUG_CFLAGS) -o $@ $<
solution.o solution.do: tree.h commands.h
commands.o commands.do: tree.h commands.h
tree.o tree.do: list.h tree.h
.PHONY: debug
debug: $(debug_objects)
$(CC) -o solution.gdb $^
.PHONY: clean
clean:
-rm $(objects) $(debug_objects) solution solution.gdb
CC=gcc
CFLAGS=-Wall-Werror-Wextra
调试\u CFLAGS=-g$(CFLAGS)
sources=solution.c tree.c list.c commands.c
对象=$(源:.c=.o)
调试对象=$(源:.c=.do)
解决方案:$(对象)
$(CC)-o$@$^
%.o:%.c
$(CC)-c$(CFLAGS)-o$@$<
%.do:%.c
$(CC)-c$(调试\u CFLAGS)-o$@$<
solution.o solution.do:tree.h commands.h
commands.o commands.do:tree.h commands.h
tree.o tree.do:list.h tree.h
.假的:调试
调试:$(调试对象)
$(CC)-o solution.gdb$^
.假冒:干净
清洁:
-rm$(对象)$(调试对象)解决方案解决方案.gdb
使用-f
选项来rm
。该选项告诉rm
忽略不存在的文件,不提示确认
clean:
rm -f $(objects) $(debug_objects) solution solution.gdb
您可以将-f添加到rm命令中。可能存在的重复项