【问题标题】:"make clean" doesn't clean dependencies with Automake?“make clean”不清除 Automake 的依赖关系?
【发布时间】:2012-07-07 20:58:57
【问题描述】:

我有一个使用 Autoconf 和 A​​utomake 的 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)自动删除这个目录?当然我可以手动完成,但是清理后还有依赖文件很烦人。

【问题讨论】:

  • 在编辑Makefile.am 或从configure.ac 中删除AM_MAINTAINER_MODE 后运行autoreconf,可能会解决您的问题。

标签: git dependencies makefile automake


【解决方案1】:

有什么方法可以让 make clean(或者可能是 git clean)自动删除这个目录?

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

【讨论】:

  • 如果您使用 automake 并且不想手动编辑 Makefile,这将特别有用。
  • 我认为这应该是答案
【解决方案2】:

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

clean::
        rm -rf .deps

到 Makefile。

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

【讨论】:

  • git clean -d 解决方案有效。不过,带有 Makefile 的那个对我来说似乎并不那么简单。由于我使用 Automake,我认为我不能简单地重新定义规则。也许有办法,但是由于依赖文件是由自动生成的 Makefile 创建的,我认为应该有一种方法可以在不被黑客攻击的情况下删除它们。
【解决方案3】:

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

来自git help clean

-d Remove untracted directories in addition to untracted files.

【讨论】:

    猜你喜欢
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 2012-10-08
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多