我知道从源代码进行安装的过程。
./configure
make
make install
但是为什么“ make”在/etc/cups/cupsd.conf之前,为什么不只是“ make install”?
到目前为止,我的理解是“ make”仅将源代码编译成可执行文件,而“ make install”实际上将它们放入可执行文件PATH文件夹中,对吗?
如果我们要在计算机上安装可执行文件,我们可以做吗
./configure
make install
而不是上面显示的3个步骤。
运行make
时,是在指示它实质上遵循针对特定目标的一组构建步骤。当不带任何参数调用make
时,它将运行第一个目标,该目标通常只是编译项目。 make install
映射到install
目标,通常只不过将二进制文件复制到目标中而已。
通常,install
目标取决于编译目标,因此您只需运行make install
就可以获得相同的结果。 但是,我可以看到至少有一个很好的理由要在单独的步骤中进行操作:特权分离。
通常,当您安装软件时,它会进入普通用户没有写访问权的位置(例如/usr/bin
和/usr/local/bin
)。然后,由于安装步骤需要特权升级,因此最终您实际上实际上不得不先运行make
,然后再运行sudo make install
。这是“ Good Thing™”,因为它允许您将软件作为普通用户进行编译(这实际上对某些项目有所作为),限制了行为不佳的构建过程的潜在损坏范围,并且仅获得root用户安装步骤的权限。
make
(不带参数)使用./ Makefile(或./ makefile)并构建first目标。按照惯例,这可能是all目标,但不一定。 make install
建立特殊目标安装。按照惯例,这将获取make all
的结果,并将其安装在当前计算机上。
并非每个人都需要make install
。例如,如果您构建一些要部署在其他服务器上的Web应用程序,或者使用交叉编译器(例如,在Linux机器上构建Android应用程序),则运行make install
没有任何意义。 >
[在大多数情况下,单行./configure && make all install
等同于您描述的三步过程,但这取决于产品,您的特定需求,而这又只是一个约定。
[如今,许多软件仅用make install
就能做正确的事情。在那些不会的情况下,安装目标不依赖于已编译的二进制文件。因此,为了安全起见,大多数人为了安全起见都使用make && make install
或其变体。
有时我想尝试编译代码更改,但不部署这些更改。例如,如果我正在破解Asterisk C代码库,并且想要确保仍在进行编译,则将保存并运行make。但是,我不想部署这些更改,因为我还没有完成编码。