当前位置: 首页 > 知识库问答 >
问题:

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

魏波娃
2023-03-14

下面是我的案例:

第一次安装的时候,我跑:

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

这将Python2.7安装到我的系统中。它将在/usr/bin中创建链接“python”,链接到/usr/bin中的Python2.7。所以当我键入>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的软链接。

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

共有1个答案

石正卿
2023-03-14

让我们来看看生成的makefile!

首先,安装目标:

install:         altinstall bininstall maninstall

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

# 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将隐藏系统二进制文件和手动页面。

 类似资料:
  • 我已经查看了JavaDoc参考,虽然我了解(各种链接)和(导出超类JavaDoc注释)之间的基本区别,但我需要澄清事情是如何实际实现的。 在EclipseIDE中,当我为继承的方法选择“GenerateElementComments”(从接口或toString()重写等)时,它会创建以下注释 如果我被要求生成JavaDoc,如果我不这样做,请将替换为,或者将其转换为真正的JavaDoc: 当我这样

  • 问题内容: 很快就有两个相等运算符:double equals( )和Triple equals( ),两者之间有什么区别? 问题答案: 简而言之: 操作员检查其实例值是否相等, 操作员检查引用是否指向同一实例, 长答案: 类是引用类型,可能有多个常量和变量在幕后引用类的同一单个实例。类引用保留在运行时堆栈(RTS)中,其实例保留在内存的堆区域中。当您控制平等时, 这意味着它们的实例是否彼此相等。

  • 我编写了一个简单的脚本,它接受任意数量的参数来演示< code>$@和< code>$*之间的区别: 在我做的 CLI 上 这就是打印出来的 因为它们是相同的,这是否意味着等于?还是我遗漏了一点?

  • 问题内容: package main 该代码可以很好地工作。但是,如果按如下所示更改方法,则会导致死循环。区别在于将替换为。为什么? 问题答案: 因为程序包检查要打印的值是否具有方法(或换句话说:是否实现接口),如果是,则将调用它以获取值的表示形式。 软件包doc中对此进行了说明: […]如果操作数实现String()字符串方法,则将调用该方法将对象转换为字符串,然后根据动词的要求对其进行格式化(

  • 我正在通过做微控制器项目来自学C++。我当前的项目是使用一对或Adafruit羽毛分组无线电。无线电数据包的库函数需要一个C样式的字符串(我相信),我理解它是一个char的数组。 我已经设置了一个枚举来反映接收方的各种操作,并希望将该状态发送回发送方。所以我想把枚举变成char的数组。 在搜索将枚举转换为char数组的方法时,最简单的方法(对我来说)是将枚举变量传递给带有switch语句的函数,该