gpt4 book ai didi

c++ - make clean 不会删除其他目录下的文件

转载 作者:行者123 更新时间:2023-11-27 22:33:18 25 4
gpt4 key购买 nike

我的问题是,当运行“make clean”时,它不会删除任何文件,包括 m 目录中的预编译头文件(不确定其他目录,因为它们没有任何要删除的文件)。但是,它会删除 makefile 所在的根目录中的所有文件。请注意,M、D、N 和 G 都是 makefile 所在目录的子目录。此外,我尝试手动运行为清理指定的每个终端命令,它成功地删除了 m 目录中的所有文件和根目录没有错误。我不知道为什么会有不一致,任何帮助表示赞赏。提前致谢。

下面显示的是我的 makefile:

#Compiler Variable
CMP=g++

#Compiler Flags Variable
CPPFLAGS= -c -std=c++17

#Directory Variables
m := ./M
ds := ./D
nn := ./N
g := ./G

M_HEAD = $(m)/L.h $(m)/M.h $(m)/T.h
M_SRC = $(m)/L.cpp $(m)/M.cpp $(m)/T.cpp
M_OJBS = L.o M.o T.o

#Targets and Dependencies
all: main.o m.o
$(CMP) main.o $(M_OJBS) -o test

main.o: main.cpp
$(CMP) $(CPPFLAGS) main.cpp

m.o: $(M_HEAD) $(M_SRC)
$(CMP) $(CPPFLAGS) $(M_HEAD) $(M_SRC)

clean:
rm -rf *.o *.h.gch test
cd $(m)
rm -rf *.o *.h.gch test
cd ..
cd $(ds)
rm -rf *.o *.h.gch test
cd ..
cd $(nn)
rm -rf *.o *.h.gch test
cd ..
cd $(g)
rm -rf *.o *.h.gch test

最佳答案

当 make 运行配方时,它会在自己的 shell 中运行配方的每一行。在配方的那一行完成后,shell 退出并为下一行启动一个新的 shell。

因此您的clean 规则与运行相同:

/bin/sh -c "rm -rf *.o *.h.gch test"
/bin/sh -c "cd $(m)"
/bin/sh -c "rm -rf *.o *.h.gch test"
/bin/sh -c "cd .."
/bin/sh -c "cd $(ds)"
/bin/sh -c "rm -rf *.o *.h.gch test"
/bin/sh -c "cd .."
/bin/sh -c "cd $(nn)"
/bin/sh -c "rm -rf *.o *.h.gch test"
/bin/sh -c "cd .."
/bin/sh -c "cd $(g)"
/bin/sh -c "rm -rf *.o *.h.gch test"

所以你的 cd 命令是无用的,因为你在子 shell 中更改目录,然后 shell 退出并且目录更改丢失,然后你运行 rm 命令与您开始时所在的目录相同。

您必须将 cd 放在与 rm 相同的(逻辑)行中,并且您不需要运行 cd .. 因为它是隐含的:

clean:
rm -rf *.o *.h.gch test
cd $(m) && rm -rf *.o *.h.gch test
cd $(ds) && rm -rf *.o *.h.gch test
cd $(nn) && rm -rf *.o *.h.gch test
cd $(g) && rm -rf *.o *.h.gch test

关于c++ - make clean 不会删除其他目录下的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58262974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com