【问题标题】:How do i set up 'make install' to check the md5 of the installed libs/bins and only installed if changed?如何设置“make install”来检查已安装库/bins 的 md5 并且仅在更改时安装?
【发布时间】:2019-06-03 14:26:52
【问题描述】:

我继承了一个使用 autoconfigure/automake 构建的相当大的项目(configure.ac/Makefile.am 文件有其自身的问题,但这是一个单独的问题)。

我的问题是顶级构建 + 构建安装会生成几个静态和动态库以及二进制文件。到现在为止还挺好。问题是“make install”会不加选择地复制这些库/箱中的每一个。 (这需要一段时间)

我希望它只复制已更改的库/bin - 可能通过比较目标文件和源文件的 md5sum。

如何在我的 configure.ac/Makefile.am 中连接它?

【问题讨论】:

  • 好的,所以你的comapre & copy make install 方案读取两个文件,比较,并可能写入一个文件。通常的make install 读取一个文件,写入一个文件。这个“时间”需要多长时间?秒?分钟?您希望通过您的方案实现什么运行时?
  • 你是对的 - 复制时间大约是几分钟。我实现了下面建议的“-C”选项,它根本没有带来任何明显的加速。
  • 好的,那么至少你有一个尝试其他事情的基线。有几篇关于 SO 的文章询问有关在 RAM 磁盘上构建的问题。那可以试试。但是您的构建可能会遇到其他一些硬件限制(例如 CPU),因此在 RAM 磁盘上构建可能也不会产生很大的影响。您必须找出真正发生的事情(无论是构建本身还是构建硬件),以使您的构建更快。

标签: gnu-make autoconf automake


【解决方案1】:

复制文件的实际程序是install(通常是/usr/bin/install);这是在INSTALL Make-variable 中定义的。

您的install 实现可能支持-C 标志:

   -C, --compare
          compare each pair of source and destination files, 
          and in some cases, do not modify the destination at all

你可能不得不 因此,您可以尝试通过覆盖此变量来提供一个执行所需操作的脚本(将源文件与目标文件进行比较,并且仅在需要时复制)。 你也可以只注入-C 标志,看看它是否能给你带来任何加速(我倾向于同意 ldav1s 的评论,它可能不会):

make install INSTALL="/usr/bin/install -C"

请注意,install 接受相当多的参数,如果您要重新实现兼容的脚本,您可能需要实现其中的一些子集。

【讨论】:

  • 感谢您的提示。我实现了这一点,但并没有带来任何明显的加速。但还是很高兴知道!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
相关资源
最近更新 更多