`make install` 会覆盖文件吗?

`make install` 会覆盖文件吗?

我花了一些时间在 Mac Os X 10.6.8 上安装较新版本的 Apache2.x。

当通过 ./configure 配置 apache 时,我指定了 Darwin 布局。此布局假定现有 apache 安装的路径设置,这正是我想要的,因为我的目标是替换旧的。

我运行了 make,然后当然是 sudo make install。

我通过以下方式检查了 apache 版本

apachetcl -v

我得到了

Server version: Apache/2.4.1 (Unix)
Server built:   Mar 31 2012 01:52:54

这很好。但这是奇怪的部分。我检查了 /etc/apache2 中的“旧”httpd.conf 文件,它有一个旧的修改日期。

直到我尝试运行 apache 之后我才真正弄清楚这一点。 Apache 尝试加载一些与新版本不兼容的扩展。

这导致我检查了 /usr/libexec/apache2 目录,我发现除了两个或三个模块外,最近没有修改过这些模块。本质上 sudo make install 并没有覆盖每个可能的文件。

What is the convention here? Should make install overwrite everything or not?

我假设这仅取决于开发人员如何编写配置脚本和 Makefile。

在再次运行 make install 之前,我最终对我所知道的任何现有 apache 目录做了一些 rm -rf 。之后,一切都是新鲜的。

答案1

Makefile关于唯一发生的事情是在它或运行的配套脚本中定义的,您是正确的。从源代码升级软件时的“最佳实践”通常是uninstall在未运行make clean或删除原始源安装目录的情况下使用该选项。

但您必须小心,如果程序在/usr/local您外部安装了文件,则可能会删除包管理器添加的文件。通常,像 Apache 这样的主要配置文件不会被破坏,而是在安装过程中简单地删除,它们可以或被保留。尽管情况并非总是如此。您可以使用-b--backup安装选项备份每个目标。

编辑: 查看它Makefile.in的当前版本,httpd看起来他们的几个cp命令添加了-p保留所有权和时间戳的开关。

相关内容