“make clean”不会清除Automake的依赖关系吗?

时间:2012-07-07 20:46:34

标签: git dependencies makefile automake

我有一个使用Autoconf和Automake的C ++项目。我确定我的src目录中有太多源文件,并将一些文件移动到子目录中。然后,我修改了Makefile.am并将这些文件从source.cpp更改为subdir/source.cpp。我知道这种方法应该可行,就像我之前为一些新文件做的那样(但后来我没有重命名)。现在我像往常一样运行以下内容:

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之后,发现还有一个.deps目录。在删除之后,它编译了。

故事的寓意如下:

  • make clean不会删除依赖项。
  • git clean -xf不会删除依赖项(可能是因为隐藏目录)。

有没有办法让make clean(或可能git clean)自动删除此目录?当然我可以手动完成,但是在干净之后留下依赖文件非常烦人。

3 个答案:

答案 0 :(得分:13)

  

有没有办法让make clean(或者可能是git clean)自动删除这个目录?

使用make distclean代替make clean,这将删除.deps

答案 1 :(得分:0)

make clean只是做makefile中的干净目标。如果要删除.deps目录,请添加

clean::
        rm -rf .deps

到Makefile。

如果您希望git clean为您执行此操作,只需添加-d标记:git clean -fxd也会清除未跟踪的子目录。

答案 2 :(得分:0)

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

来自git help clean

  

-d Remove untracted directories in addition to untracted files.