为什么在“进行安装”之前进行“进行”

问题描述 投票:17回答:4

我知道从源代码进行安装的过程。

  1. ./configure
  2. make
  3. make install

但是为什么“ make”在/etc/cups/cupsd.conf之前,为什么不只是“ make install”

到目前为止,我的理解是“ make”仅将源代码编译成可执行文件,而“ make install”实际上将它们放入可执行文件PATH文件夹中,对吗?

如果我们要在计算机上安装可执行文件,我们可以做吗

  1. ./configure
  2. make install

而不是上面显示的3个步骤。

makefile cmake open-source gnu-make configure
4个回答
18
投票

运行make时,是在指示它实质上遵循针对特定目标的一组构建步骤。当不带任何参数调用make时,它将运行第一个目标,该目标通常只是编译项目。 make install映射到install目标,通常只不过将二进制文件复制到目标中而已。

通常,install目标取决于编译目标,因此您只需运行make install就可以获得相同的结果。 但是,我可以看到至少有一个很好的理由要在单独的步骤中进行操作:特权分离。

通常,当您安装软件时,它会进入普通用户没有写访问权的位置(例如/usr/bin/usr/local/bin)。然后,由于安装步骤需要特权升级,因此最终您实际上实际上不得不先运行make,然后再运行sudo make install。这是“ Good Thing™”,因为它允许您将软件作为普通用户进行编译(这实际上对某些项目有所作为),限制了行为不佳的构建过程的潜在损坏范围,并且仅获得root用户安装步骤的权限。


3
投票

make(不带参数)使用./ Makefile(或./ makefile)并构建first目标。按照惯例,这可能是all目标,但不一定。 make install建立特殊目标安装。按照惯例,这将获取make all的结果,并将其安装在当前计算机上。

并非每个人都需要make install。例如,如果您构建一些要部署在其他服务器上的Web应用程序,或者使用交叉编译器(例如,在Linux机器上构建Android应用程序),则运行make install没有任何意义。 >

[在大多数情况下,单行./configure && make all install等同于您描述的三步过程,但这取决于产品,您的特定需求,而这又只是一个约定。


1
投票

[如今,许多软件仅用make install就能做正确的事情。在那些不会的情况下,安装目标不依赖于已编译的二进制文件。因此,为了安全起见,大多数人为了安全起见都使用make && make install或其变体。


1
投票

有时我想尝试编译代码更改,但不部署这些更改。例如,如果我正在破解Asterisk C代码库,并且想要确保仍在进行编译,则将保存并运行make。但是,我不想部署这些更改,因为我还没有完成编码。

© www.soinside.com 2019 - 2024. All rights reserved.