我有以下makefile:
CCC = g++
CCFLAGS = -ansi
driver: driver.o graph.o
$(CCC) -o driver driver.o graph.o
graph.o: graph.h
driver.o: graph.h
adjl:
rm -f graph.h graph.cc
ln -s adjl/graph.cc .
ln -s adjl/graph.h .
touch graph.cc graph.h
adjm:
rm -f graph.h graph.cc
ln -s adjm/graph.cc .
ln -s adjm/graph.h .
touch graph.cc graph.h
clean:
rm -f *.o
real_clean: clean
rm -f graph.cc graph.h
rm -f driver
我的想法是,我试图链接两个不同的.cc/.h文件,具体取决于我想要使用的实现.如果我make_clean,没有.cc/.h文件存在,我只有一个driver.cc文件和文件夹中的makefile.如果我打电话给make,它说它们是最新的.即使我在adjl/adjm中编辑文件以使它们成为"更新"版本,也会发生这种情况.
[95]% ls adjl/ adjm/ driver.cc makefile [96]% make adjl make: `adjl' is up to date. [97]% make adjm make: `adjm' is up to date.
我从我做过的另一个项目中获取了模板makefile,并且它们以相同的方式编写,但我可以重复生成相同的命令而没有"最新"问题.
我用谷歌搜索但没有发现类似于我的问题(他们通常似乎涉及在制作之前没有清洁的用户).
感谢任何人阅读.
lij*_*jie 10
在adjl和adjm目标是真正的目标.由于它们没有依赖关系,并且存在文件(列表中的2个目录),因此make不会执行任何操作(因为它们存在).
但是,您想要的是指定adjl和adjm作为伪目标(以便在指定命令时执行命令).为此,
.PHONY: adjl adjm
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请阅读http://www.gnu.org/software/automake/manual/make/Phony-Targets.html.
编辑
事实上,real_clean和clean规则也许应该还可以制成假.
| 归档时间: |
|
| 查看次数: |
11201 次 |
| 最近记录: |