"clean"在制作文件中不起作用
"clean" not working in make file
这是我的make文件。
all: observer
observer: main.o weather_center.o display.o subject.o observer.o
g++ main.o weather_center.o display.o subject.o observer.o -o observer
main.o: main.cpp
g++ -c main.cpp
weather_center.o: weather_center.cpp
g++ -c weather_center.cpp
display.o: display.cpp
g++ -c display.cpp
subject.o: subject.cpp
g++ -c subject.cpp
observer.o: observer.cpp
g++ -c observer.cpp
clean:
rm -f *o observer
我正在尝试使用
clean:
rm -f *o observer
清理临时*.o文件。但是程序编译并生成目标程序集,但不删除*.o文件。也没有显示任何错误。
- 我在终端中尝试了
rm -f *o observer
。它运行良好 - 我已使用
Tab
进行缩进 - 目录中没有以CCD_ 3或CCD_
- 尝试
$(RM)
而不是rm
。但没有运气
我发现了这个问题。必须将clean
指定为all
的目标,否则它不会调用。一般都是这样。
all: [your executive names] clean
在上述情况下,
all: observer clean
这是上面案例的完整制作文件
all: observer clean
observer: main.o weather_center.o display.o subject.o observer.o
g++ main.o weather_center.o display.o subject.o observer.o -o observer
main.o: main.cpp
g++ -c main.cpp
weather_center.o: weather_center.cpp
g++ -c weather_center.cpp
display.o: display.cpp
g++ -c display.cpp
subject.o: subject.cpp
g++ -c subject.cpp
observer.o: observer.cpp
g++ -c observer.cpp
clean:
rm -f *o observer
正如其他人所提到的,这可能是一个缩进问题。我准确地复制了你的makefile,触摸了一些伪.o文件并运行了它:
$ touch main.o weather_center.o display.o subject.o observer.o
$ make clean
Makefile:4: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.
$
修复压痕后,它似乎对我来说很好:
$ touch main.o weather_center.o display.o subject.o observer.o
$ ls *.o
display.o main.o observer.o subject.o weather_center.o
$ make clean
rm -f *o observer
$ ls *.o
ls: cannot access *.o: No such file or directory
$
我做的具体压痕修复是:
- 目标行不应该有任何前导空格
- 配方行必须仅以一个选项卡开头,并且不能有其他空白
例如:
clean:
rm -f *o observer
我在这里保存了固定版本,因为stackoverflow会混淆制表符/空白。请确保从RAW粘贴数据进行复制。
在更详细地阅读了问题、评论和你的自我回答后,我认为可能对make的传统用法有一些解释。
您可以调用带有要构建的目标列表的make
可执行文件,或者根本没有目标。
在指定了目标的情况下,make将尝试构建/重建这些目标。例如,使用更正的Makefile,make observer
将构建observer
目标(observer
可执行文件),make main.o
将简单地编译main.cpp以生成main.o,而make clean
将调用clean
规则来删除列出的文件。
另一方面,如果您在没有目标的情况下调用make
,那么make将简单地使用Makefile中定义的第一个目标作为它构建的目标。惯例是,这个目标被称为all
,但它可以被称为任何你喜欢的名称。因此,在更正的makefile的情况下,在不显式传递任何目标的情况下调用make
应该会导致重建all
及其依赖关系observer
。我怀疑这就是出现混乱的地方——为这个没有明确提到目标的makefile调用make
应该导致调用clean
目标。这是预期的make
行为。
在我的情况下(在Windows上),我的make文件如下:
clean:
rm *.o
当打开终端时,运行这个命令对我来说很好,所以我一开始认为这是我的makefile缩进的问题。
我意识到默认的Windows终端实际上是一个支持rm *.o
的powershell窗口。但是,make-clean命令打开了一个不支持rm
命令的cmd窗口。
我的解决方案最终将clean:
部分变成了cmd for Windows支持的部分。最终结果是:
clean:
del *.o
all:observer clean#1
observer: main.o weather_center.o display.o subject.o observer.o
g++ main.o weather_center.o display.o subject.o observer.o -o observer
main.o: main.cpp
g++ -c main.cpp
weather_center.o: weather_center.cpp
g++ -c weather_center.cpp
display.o: display.cpp
g++ -c display.cpp
subject.o: subject.cpp
g++ -c subject.cpp
observer.o: observer.cpp
g++ -c observer.cpp
clean:
rm -f *.o #2
1将all:observer修复为[all:observer clean]
2将rm-f*o观察器固定为[rm-f*.o]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在其他文件中创建类时在 c++ 项目中不起作用
- g++ -I 和 -L 命令来查找不起作用的 .hpp 文件
- 该程序将.csv文件中的一系列单词放入数组中,然后随机生成句子.但它不起作用
- 无法打开包含文件'Graphics.hpp'没有这样的文件或目录,Visual Studio的其他包含不起作用
- 从类中的另一个文件请求函数不起作用
- 即使我正在.cpp文件中实例化一个伪对象,.cpp文件内模板函数的定义也不起作用
- 简单的二分搜索对我不起作用。我正在尝试从文本文件中搜索单词
- SFML 加载从文件不起作用,奇怪的错误
- C++密钥和文件的映射不起作用
- 从 TXT 文件中删除行不起作用
- QT QML:使用.qrc文件将SQLite数据库部署到Android不起作用
- bcdedit 文件输出不起作用,但其他命令可以
- 文件写入在PHP扩展c / c ++(linux)中不起作用
- Makefile在Linux中工作,但在Windows下不起作用,在子目录中找不到文件
- 使用 libcurl C++将文件下载到 Ubuntu,简单示例不起作用
- 尝试读取数据文件,存储在数组中并打印所有元素,但它不起作用
- 为什么写入文件不起作用
- 包括不起作用C 的文件
- 在 C++ 中,.h 文件包含文件但不起作用