【发布时间】:2023-03-13 21:52:01
【问题描述】:
我有以下生成文件:
CCC = g++
CCFLAGS = -ansi
驱动程序:driver.o graph.o
$(CCC) -o 驱动程序 driver.o graph.o
图.o:图.h
驱动程序.o:graph.h
形容词:
rm -f graph.h graph.cc
ln -s adjl/graph.cc 。
ln -s adjl/graph.h 。
触摸图.cc graph.h
形容词:
rm -f graph.h graph.cc
ln -s adjm/graph.cc 。
ln -s adjm/graph.h 。
触摸图.cc graph.h
干净的:
rm -f *.o
real_clean:干净
rm -f graph.cc graph.h
rm -f 驱动程序
我的想法是我试图根据我想要使用的实现来链接两个不同的 .cc/.h 文件。如果我制作 real_clean,则不存在任何 .cc/.h 文件,我只有一个 driver.cc 文件和文件夹中的 makefile。如果我打电话给make,它说它们是最新的。即使我编辑 adjl/adjm 中的文件以使其成为“更新”版本,也会发生这种情况。
[95]% ls adjl/ adjm/ driver.cc 生成文件 [96]% 制作 adjl make: `adjl' 是最新的。 [97]% 调整 make: `adjm' 是最新的。
我从我做过的另一个项目中获取了模板 makefile,它们的编写方式相同,但我可以重复执行相同的命令而不会出现“最新”问题。
我用谷歌搜索过,但没有发现与我类似的问题(他们通常似乎涉及在制作前不清洁的用户)。
感谢大家的阅读。
【问题讨论】:
-
确实,make 和 real_clean 都可以工作。
-
我明白你的意思,但它确实有效。我刚刚从以前的课程中复制了一个 makefile,它可以工作,但是我对它们如何工作的理解非常渺茫。
-
make 具有隐式规则(例如,调用 c++ 编译器从 .cc 生成 .o),这就是为什么 driver.o 没有其他行的原因,例如但是,必须明确声明对
.h的依赖(因为make 不会从源文件中推断出它)。 -
@lijie 非常感谢您的解释。