我知道从源头安装的过程是。
./configuremakemake install但是为什么在/etc/cups/cupsd.conf之前“做”,为什么不直接做"make“
到目前为止,我的理解是“让”只将源代码编译成可执行文件,而"make“实际上将它们放在可执行路径文件夹中,对吗?
如果我们想在机器上安装可执行文件,我们能不能
./configuremake install而不是上面所示的三个步骤。
发布于 2013-05-19 18:41:17
当您运行make时,您将指示它从本质上遵循特定目标的一组构建步骤。当没有参数的情况下调用make时,它运行第一个目标,这通常只是编译项目。make install映射到install目标,它通常只会将二进制文件复制到它们的目的地。
通常,install目标依赖于编译目标,因此只需运行make install就可以获得相同的结果。然而,至少有一个很好的理由可以在单独的步骤中完成:特权分离。
通常,当您安装软件时,它会进入普通用户没有写访问权限的位置(如/usr/bin和/usr/local/bin)。然后,通常情况下,您实际上不得不运行make,然后运行sudo make install,因为安装步骤需要权限提升。这是一个“好事™”,因为它允许将您的软件编译成一个正常的用户(这实际上对某些项目产生了影响),限制了行为恶劣的构建过程的潜在损害范围,并且只获得安装步骤的根权限。
发布于 2013-05-19 18:23:28
没有参数的make接受./Makefile (或./makefile)并构建第一个目标。按照惯例,这可能是all目标,但不一定。make install构建特殊目标,安装。按照惯例,这将获取make all的结果,并将其安装到当前计算机上。
不是每个人都需要make install。例如,如果您构建了要部署在另一台服务器上的web应用程序,或者使用交叉编译器(例如在Linux机器上构建Android应用程序),那么运行make install是没有意义的。
在大多数情况下,单行./configure && make all install将等同于您所描述的三步流程,但这取决于产品,取决于您的特定需求,而且这也只是一个约定。
发布于 2013-05-19 18:25:02
有时,我希望编译代码更改,但不部署这些更改。例如,如果我正在侵入星号C代码库,并且希望确保我所做的更改仍然是编译的,我将保存并运行make。但是,我不想部署这些更改,因为我还没有完成编码。
对我来说,运行make只是一种确保我不会在代码中出现太多编译错误来定位它们的方法。也许更有经验的C程序员没有这个问题,但对我来说,限制编译之间的更改数量有助于减少可能已经完全破坏了我的构建的更改的数量,这使得调试变得更容易。
最后,这也给了我一个停止点。如果我想吃午饭,我知道有人可以在应用程序当前的工作状态下重新启动应用程序,而不必来找我,因为只有make才会将二进制文件复制到实际的应用程序文件夹中。
可能还有其他原因,但这是我接受这两个命令是分开的事实的原因。就像其他人说的,如果你想把它们结合起来,你可以用你的shell来组合它们。
https://stackoverflow.com/questions/16637860
复制相似问题