【问题标题】:make distclean breaks with non Automake external libraries使用非 Automake 外部库进行 distclean 中断
【发布时间】:2021-11-05 07:57:06
【问题描述】:

我在使用 Automake 时遇到以下问题。我的项目使用 Autoconf 以及自定义 makefile 和 makefile 模板。我已将项目部分转换为 Autotools,现在我正在使用一些 make 目标以确保一切按预期工作。

项目包含需要首先构建的外部依赖项。这些是我通过主 Makefile.am 中的 SUBDIRS 添加到项目中的非 Automake(plain make)库。有了这个,我可以成功构建外部库,甚至将它们安装在正确的prefix

然而,问题在于,对于在单独的构建目录中配置的外部非 Automake 库,不会为它们创建任何相应的目录和 Makefile。因此,当我在构建目录中运行 make distclean 时,无法找到库和中止的目录。

此问题的一个可能解决方案是让configure 在构建目录中创建缺少的目录,并添加一个定义空distclean 目标的虚拟Makefile。但是,这非常难看,如果可能的话我会避免它。有没有更成熟的方法来处理这类集成问题?

谢谢

【问题讨论】:

  • 我没有关注源代码外构建和make distclean 之间的联系。但是,我倾向于说,如果支持源外构建对您很重要,那么配置您的外部依赖项副本以支持它是其中的重要组成部分。
  • make distclean 将寻找外部库目录的副本以递归方式运行make distclean。如果我在源代码中构建,这些目录将因为原件而存在。在源外构建中,这些将丢失。不幸的是,更改外部库不是一种选择。
  • 如果你只能部分地进行源代码外构建,那么首先似乎没有什么意义。如果您的第三方库不支持它并且您拒绝修改它们,那么我看到的唯一好的解决方案是解开这些库或放弃源代码外构建。我认为没有任何理由花精力支持混合源内/源外构建。

标签: autotools automake


【解决方案1】:

到目前为止,我能想到的最好办法是在配置时使用AC_CONFIG_LINKS 在构建目录中创建指向外部库的链接。这样make distclean就会运行外部库的distclean,最终删除build目录下的链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 2015-03-09
    相关资源
    最近更新 更多