【发布时间】:2016-06-03 18:58:17
【问题描述】:
当我想安装一个库时,我试图了解 git 是如何工作的。假设我有一个名为 foo 的库,它有两个版本:foo-1.0 和 foo-2.0。所以,我运行git clone git://github.com/dartsim/dart.git,它会下载所有源文件。然后,我决定要安装版本foo-1.0。所以,我运行git checkout release-1.0。然后,我用mkdir build创建一个构建目录,用cd build进入它,然后用cmake ../src和make install构建并安装库。
好的,所以在build 文件夹中,有一个名为libfoo.so.1 的库。检查我的/usr/local/lib 目录后,安装后还有libfoo.so.1 的副本。我还看到头文件foo.h已经复制到/usr/local/include。
现在,假设我还想在同一系统上安装foo-2.0,而不卸载foo-1.0。例如,我可能使用 git 进行了更新,这需要我重新编译并重新安装最新版本。
安装的库和头文件会发生什么?我猜在build 目录中会创建一个foo-2.0,它也会被复制到/usr/local/lib。但是,头文件呢?版本 1 和 2 不同,但源文件中只有一份副本。运行checkout release-2.0、cmake ../src 和make install 是否会用版本2 的头文件覆盖usr/local/include 的头文件?在这种情况下,如何在同一系统上同时使用两个版本的库?
我只是不太清楚checkout 的工作原理以及它在安装方面的实际含义.....任何解决此问题的帮助都会很棒,谢谢!
【问题讨论】:
-
这与
git或cmake无关,这些只是执行您告诉他们执行的操作的工具。您所追求的是共享库 soname 和版本控制(主要版本更新与次要版本更新)之间的区别。优秀的软件打包从业者将以这样的方式打包代码,您可以通过向cmake提供不同的构建参数,从主分支构建foo-1.0和foo-2.0。checkout应用于获取以前的 minor 版本,而不是用于获取以前的 major 版本。
标签: git ubuntu makefile installation cmake