web-dev-qa-db-ja.com

「make install」と「make altinstall」の詳細の違い

私の場合は次のとおりです。

buntu 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内のpython2.7にリンクするリンク "python"を/usr/binにも作成します。したがって、>pythonと入力すると、>python2.7と入力したときと同じように、システムはPython 2.7.4を開始します。

しかし、この方法でインストールする場合:

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

/usr/binのリンク「python」はまだ存在し、デフォルトのシステムバージョンであるpython2.6へのリンクです。もちろん、それを削除して、python2.7にリンクする新しいソフトリンクを作成できます。

/usr/binのリンクを除き、コマンド「make install」と「make altinstall」の違いは何ですか?

50
qiuhan1989

生成されたMakefileを見てみましょう!

まず、インストールターゲット:

install:         altinstall bininstall maninstall

altinstallおよびbininstallとともに、maninstallが行うすべてを実行します。

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:altinstallpythonリンクとマニュアルページリンクの作成をスキップし、installはシステムバイナリとマニュアルページを非表示にします。

89
Collin