我真的很难理解git
,所以这里对我之前提出的问题进行了更严格的改写。我将解释一个假设的场景,详细说明我在使用git
下载某些代码并将其安装到计算机上时的想法,希望有人可以告诉我哪个部分我不正确!
git clone git://github.com/foo/foo.git
foo
,并下载源代码和git数据git checkout release-1.0
make
,它编译版本1.0的代码libfoo.so.1
make install
libfoo.so.1
复制到目录/usr/local/lib
foo.h
复制到目录/usr/local/include
foo.h
的版本,对应于软件的版本1.0 git checkout release-2.0
make
,它编译版本2.0的代码libfoo.so.2
make install
libfoo.so.2
复制到目录/usr/local/lib
foo.h
复制到目录/usr/local/include
foo.h
的版本,对应于软件的版本2.0 libfoo.so.2
的{{1}},并包含位于{{1的/usr/local/lib
}} foo.h
的{{1}},并包含位于{{1的/usr/local/include
}} libfoo.so.1
是软件版本2.0的头文件,而不是版本1.0。所以,我很困惑的是如何在你的机器上安装两个版本的软件。实际的库文件/usr/local/lib
和foo.h
都已创建,可以通过两个不同的项目链接,但本地计算机上只安装了/usr/local/include
的一个版本。因此,只有安装了最新版本的版本才会有正确的头文件,因为这两个版本需要不同版本的foo.h
。
请有人解释一下我感到困惑的地方吗?谢谢!
答案 0 :(得分:1)
你的问题根本与git无关。你会遇到同样的问题,问题的根源是通过安装一个版本,你可以在固定的位置(/usr/lib/foo.h
)覆盖相同的文件。如果您希望能够同时使用这两个版本,则必须找到更改它的方法。
答案 1 :(得分:1)
您可以将库的不同版本安装到不同的目录中,以便安装的第二个版本不会覆盖第一个版本的文件。通常,您可以在运行./configure --prefix=/opt/foo-v1
make
make install
脚本时指定安装前缀。
例如,对于版本1,您可以运行:
libfoo.so.1
/opt/foo-v1/lib
将安装在foo.h
中,/opt/foo-v1/include
(适用于版本1)将安装在./configure --prefix=/opt/foo-v2
make
make install
中。
同样,对于版本2,您可以运行:
libfoo.so.2
/opt/foo-v2/lib
将安装在foo.h
中,/opt/foo-v2/include
(适用于版本2)将安装在clang++ -I/opt/foo-v1/include -L/opt/foo-v1/lib -lfoo program1.cc
中。
现在,当您编译依赖于库的版本1的程序时,您可以为版本1指定适当的头和库路径:
clang++ -I/opt/foo-v2/include -L/opt/foo-v2/lib -lfoo program2.cc
同样,对于版本2:
README
请注意,指定安装前缀的确切过程因项目而异,具体取决于所使用的构建工具。通常,会有一个INSTALL
和/或{{1}}文件来记录相关项目的过程。