“make install”和“make altinstall”之间的细节差异

时间:2013-04-15 14:59:05

标签: makefile install

以下是我的案例:

我正在使用Ubuntu 10.04(Lucid Lynx)。系统的默认Python是v2.6.5,但我需要Python v2.7。所以我从python.org下载了源代码并尝试安装它。

我第一次安装它时,我跑了:

cd Python2.7.4
./configure --prefix=/usr
make
su root
make install

这会将Python 2.7安装到我的系统中。它将在/usr/bin中创建一个链接“python”,并在python2.7中链接到/usr/bin。因此,当我输入>python时,系统将为我启动Python 2.7.4,就像我键入>python2.7一样。

但是当我以这种方式安装时:

cd Python2.7.4
./configure --prefix=/usr
make
su root
make altinstall

/usr/bin中的链接“python”仍然存在,并链接到python2.6,这是默认的系统版本。当然,我可以删除它并创建一个链接到python2.7的新软链接。

命令“make install”和“make altinstall”有什么区别,/usr/bin中的链接除外?

1 个答案:

答案 0 :(得分:77)

让我们看一下生成的Makefile!

首先,安装目标:

install:         altinstall bininstall maninstall

它会完成altinstall所做的一切,以及bininstallmaninstall

这是bininstall;它只是创建python和其他符号链接。

# Install the interpreter by creating a symlink chain:
#  $(PYTHON) -> python2 -> python$(VERSION))
# Also create equivalent chains for other installed files
bininstall:     altbininstall
        -if test -f $(DESTDIR)$(BINDIR)/$(PYTHON) -o -h $(DESTDIR)$(BINDIR)/$(PYTHON); \
        then rm -f $(DESTDIR)$(BINDIR)/$(PYTHON); \
        else true; \
        fi
        (cd $(DESTDIR)$(BINDIR); $(LN) -s python2$(EXE) $(PYTHON))
        -rm -f $(DESTDIR)$(BINDIR)/python2$(EXE)
        (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)$(EXE) python2$(EXE))
        ... (More links created)

这里是maninstall,它只是创建了Python手册页的“无版本”链接。

# Install the unversioned manual pages
maninstall:     altmaninstall
        -rm -f $(DESTDIR)$(MANDIR)/man1/python2.1
        (cd $(DESTDIR)$(MANDIR)/man1; $(LN) -s python$(VERSION).1 python2.1)
        -rm -f $(DESTDIR)$(MANDIR)/man1/python.1
        (cd $(DESTDIR)$(MANDIR)/man1; $(LN) -s python2.1 python.1)

TLDR:altinstall跳过创建python链接和手册页链接,install将隐藏系统二进制文件和手册页。

相关问题