我不确定这是否是问这个问题的最佳地点 - 如果有更好的地方,请为我指出正确的方向。
假设我有两台机器 - A 是开发机器,B 是生产机器。 A 拥有类似编译器的软件,可用于从源代码构建软件,而 B 则没有。
在 A 上,我可以按照通常的例程轻松地从源代码构建软件:
./configure
make
然后,我可以通过运行在 A 上安装构建的软件sudo make install
。然而,我真正想做的是安装我刚刚在 B 上构建的软件。最好的方法是什么?
我考虑过以下几种选择:
- 使用包管理器在 B 上安装软件:这对我来说不是一个选择,因为包管理器中可用的软件非常过时。
- 在 B 上安装编译器和其他构建工具:由于各种限制,我不想在生产机器上安装构建工具。
- 手动将二进制文件从 A 复制到 B:这很容易出错,并且我想确保二进制文件在生产计算机上以一致的方式安装。
- 仅
make
在 B 上安装,传输源目录,并sudo make install
在 B 上运行:这是迄今为止我找到的最佳解决方案,但由于某种原因(可能是时钟偏移),make
将尝试重新构建应该已经存在的软件由于 B 上未安装构建工具,因此失败。由于我的机器的 I/O 速度也很糟糕,因此传输源目录需要很长时间。
如果有一种方法可以制作某种包含构建的二进制文件的包,可以传输和执行该包来安装二进制文件和配置文件,那就太好了。是否存在这样的工具?
答案1
使用您到目前为止所拥有的内容,如果 makefile 是使用 GNU 自动工具生成的,我将设置目标位置或安装路径和
./configure --prefix=/somewhere/else/than/the/usual/usr/local
然后运行
make && make install
最后将前缀文件夹中的文件复制到usr/
另一台机器上的文件夹中。这是假设两台机器具有相同的架构,如果不是,则使用相应的交叉工具链。
答案2
最简洁的方法可能是使用操作系统使用的打包工具为应用程序创建包,然后像其他任何程序一样安装它。如何做到这一点因包管理器和系统而异),并且存在一定的学习曲线。
/opt/packagename
如果源包支持在某个子树(例如或/usr/local/packagename
)中安装软件,则手动安装可能会更容易一些。在一台计算机上编译并安装,然后将该子树复制到另一台计算机上的相同位置。该目录应仅包含所有相关文件。
如果您需要更改/etc
,则必须手动执行这些操作。此外,要实际访问二进制文件,您必须将它们符号链接到路径中的某个目录,或者将软件包bin
目录添加到路径中。大多数使用autoconf
/ 的软件包automake
都可以将--prefix
参数传递给./configure
脚本来设置安装路径。
无论如何,您需要找出您编译的应用程序需要哪些库等,并确保两台机器上都有兼容的版本。