Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Makefile-如何隐藏";没有这样的文件或目录;清洁时出错?_C_Makefile - Fatal编程技术网

C Makefile-如何隐藏";没有这样的文件或目录;清洁时出错?

C Makefile-如何隐藏";没有这样的文件或目录;清洁时出错?,c,makefile,C,Makefile,我正在创建一个C项目作为作业。除了源文件外,它还必须包括一个Makefile,该Makefile必须使用命令“make”编译可执行的“solution”,另一个可执行的“solution.gdb”必须使用命令“make debug”遵从额外的“-g”参数。为了做到这一点,我决定创建一组单独的对象文件(“*.do”文件) 然而,“makeclean”命令必须从目录中删除所有对象和可执行文件。在仅使用一个命令(“make”或“makedebug”)之后,当我尝试使用“makeclean”命令时,会出

我正在创建一个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命令中。可能存在的重复项