2012-07-07 54 views
4

我有一个使用Autoconf和Automake的C++项目。我决定在我的src目录中有太多的源文件,并将一些文件移动到一个子目录中。然后,我修改了Makefile.am并将这些文件从source.cpp更改为subdir/source.cpp。我知道这种方法应该能够工作,就像我以前为一些新文件所做的那样(但之后我没有重命名任何东西)。现在我跑到下面,像往常一样:“make clean”不清除与Automake的依赖关系?

autoreconf 
./configure 
make clean 
make 

我得到的是这样的错误消息:

No rule to make target "source.cpp" needed for "source.o" 

我不明白什么地方出了错。我检查了我的Makefile,但它似乎是正确的。所以我克隆了我的git仓库到一个新的地方,并尝试了一个make,并且它工作。没问题,我想,并且在我的原始目录上做了一个git clean -xf。在此之后,编译仍然不起作用。现在我做了两个目录钢结构制品(陆续git clean -xf一个diff,发现仍然存在一个.deps目录中删除的是,它编译后

这个故事的寓意是:。

  • make clean不会删除相关性。
  • git clean -xf不删除依赖关系(可能因为隐藏目录)。

有没有什么办法,使make clean(或可能是git clean)自动删除此目录?当然,我可以手动执行它,但是非常烦人的是在清理完成后还有依赖项文件。

+1

运行''编辑Makefile.am',或'configure.ac'删除'AM_MAINTAINER_MODE'后autoreconf',可能会解决你的问题。 – ptomato 2012-07-08 13:33:18

回答

0

make clean只是在你的makefile中做任何干净的目标。如果你想删除.deps目录,添加

clean:: 
     rm -rf .deps 

到Makefile。

如果您想git clean为您做到这一点,只需添加-d标志:git clean -fxd也将清理未跟踪的子目录。

+1

git clean -d解决方案正常工作。然而,使用Makefile的那个对我来说似乎并不那么简单。由于我使用Automake,我不认为我可以简单地重新定义规则。也许有一种方法,但由于依赖文件是由自动生成的Makefile创建的,我认为应该有一种方法可以在不进行黑客攻击的情况下将其删除。 – petersohn 2012-07-08 06:02:55

11

有什么办法让make clean(或者可能是git clean)自动移除这个目录吗?

使用make distclean而不是make clean这将删除.deps

+0

如果您使用automake并且不想手动编辑您的Makefile,这特别有用。 – SailorCire 2016-02-11 18:17:00

+0

我认为这应该是答案 – 2017-09-05 12:56:29

0

如果您愿意运行git clean -xf,则应该愿意运行git clean -xfd

git help clean

-d Remove untracted directories in addition to untracted files.