![我可以在一台计算机上编译并在另一台计算机上“make install”吗?](https://linux22.com/image/62509/%E6%88%91%E5%8F%AF%E4%BB%A5%E5%9C%A8%E4%B8%80%E5%8F%B0%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%B8%8A%E7%BC%96%E8%AF%91%E5%B9%B6%E5%9C%A8%E5%8F%A6%E4%B8%80%E5%8F%B0%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%B8%8A%E2%80%9Cmake%20install%E2%80%9D%E5%90%97%EF%BC%9F.png)
给定两台具有相同规格的计算机 A 和 B,并且都具有相同的 Linux 发行版,是否可以在计算机 A 中“make”编译并将目录复制到计算机 B 并“make install”而不会出现问题?
答案1
一般来说,如果两台主机确实具有相同的规格(即相同的处理器架构、安装相同版本的相同库、安装相同的内核、所引用的配置文件/库的相同文件系统结构,...),则应该是可能的。但既然你可以在 Makefiles 中做一些令人讨厌的事情可能这是不可能的情况。
该make
命令通常只是编译所有源代码,将其链接到已安装的库和内核,然后生成二进制输出文件。
答案2
最近,我必须编译 2010 版本,由于依赖问题,这在现代操作系统qemu
上很困难。Ubuntu 16.04
因此,我被迫在 中进行 make(编译)Ubuntu 10.04
,然后在 Ubuntu 16.04 中进行 make install。
make
用于timestamps
决定需要采取哪些操作。因此,只要在将编译文件从进行编译的计算机传输到要进行安装的计算机时保留时间戳,它就应该可以工作。有多种工具可用于保存和恢复meta-data
目录树中的文件,例如元存储, 和git 缓存元。后者用于 git 存储库,因为 git 不保留时间戳。其他工具如同步, 和CP允许您在保留时间戳的同时传输文件,并且不需要像前两个工具那样显式保存和恢复它们。
如果像我一样,您正在使用git
服务器在两台计算机之间传输文件(git push 和 git pull)。以下是它所需的步骤。
#Computer 1 (where compilation is to be done)
make
git-cache-meta --store #this will create a .git_cache_meta file in the current directory
git add .
git commit -m "installed binaries; preserving timestamps"
git push origin master #or whatever may be your remote repository, and branch
#Computer 2 (where install is to be done)
git pull origin master #or use git clone <remote repository URL> <branch name>
git-cache-meta --apply
make install
在你的情况下,rsync
看起来是一个更简单的解决方案,因为它可以复制文件,同时保留时间戳(-t option
),而不必担心远程 git 存储库等。
以下是您将如何使用 来完成此操作rsync
。
rsync -a <source> <destination>
同样,使用cp
命令。
cp -a <source> <destination>
笔记:尽管在您的情况下,计算机和操作系统是相同的,但对其他人来说可能并非如此,在这种情况下,必须注意动态依赖关系(运行时依赖关系)。例如,在我的例子中,我必须libz.so.1
在我的 Ubuntu 16.04 机器上安装 , ( sudo apt-get install lib32z1
)。