如何从源代码编译和安装程序


39

这个问题确实限制了我对Linux的使用。如果应用程序不在存储库中,或者没有安装程序脚本,那么我真的很难在哪里以及如何从源代码安装应用程序。

与Windows相比,这很容易。您(非常需要)使用安装程序应用程序来完成向导中的所有工作。使用Linux ...没那么多。

那么,您是否对此有任何提示或指示,或者是否有任何网站明确说明从源代码安装Linux程序的方式,原因和位置?


7
“与Windows相比,这很容易。您(非常需要)使用安装程序应用程序来完成向导中的所有工作。对于Linux,则不是那么多。” 这个问题有一个弱点。在Windows中,您很少获得源代码,因此,无论谁制作该软件包,您都将受到摆布。如果考虑到这一点,它与说“没有Linux软件包,因此我必须从源代码构建”并没有什么不同。没有办法让它开始。在* nix-land中,从源代码构建通常是最后的选择,但在Windows-ville中很少选择。
艾利·佩恩

2
话虽这么说... +1碰到一个常见问题,所有* nix系统的新手都应该回答。:)从源代码构建有时意味着在修复一个讨厌的错误与遭受痛苦之间的区别,直到下一个软件版本为止。确实还不错,正如这里许多人指出的那样,一旦您知道要寻找什么以及如何做,就很轻松了。
艾利·佩恩

Answers:


22

通常,该项目将有一个网站,其中包含有关如何构建和安装它的说明。Google首先。

在大多数情况下,您将执行以下任一操作:

  1. 下载tarball(tar.gz或tar.bz2文件),这是特定版本的源代码的发行版
  2. 使用类似tar zxvf myapp.tar.gzgzip压缩tarball或tar jxvf myapp.tar.bz2bzip 压缩tarball 的命令提取tarball
  3. cd进入上面创建的目录
  4. ./configure && make && sudo make install

要么:

  1. 使用git或svn或其他方法从其官方源代码库中获取最新源代码
  2. cd进入上面创建的目录
  3. ./autogen.sh && make && sudo make install

configure和autogen.sh都将接受--prefix参数来指定软件的安装位置。我建议查看应该将自己编译的软件放在哪里?以获取有关安装定制软件的最佳位置的建议。


为什么要在获取最新版本时使用autogen.sh,而将configure / make用于正式发行版?
路易·萨林

1
通常,想要“出血边缘”软件的人会从版本控制软件(如git,subversion或CVS)中拉出发行版。这是“出血边缘”,因为它可能未经测试,与已发布的tarball不同(至少在大多数情况下已得到保证)。说得通?
马特·西蒙斯

2
@Matt,肯定是有道理的,但我认为评论的目的在于,Sandy现在使它看起来好像每个git / svn树干中都有一个autogen.sh。
reiche

1
每个锅里还有一只鸡...之类的。哎呀,我偶尔也会遇到没有配置脚本的软件。如果有一个简单,统一的方法,我们就不需要软件包;-)
Matt Simmons 2010年

马特(Matt)绝对正确,这就是为什么我说“大部分”,并首先提倡查找该项目的网站。autogen.sh/configure建议将适用于几乎每个GNOME模块以及大量其他项目。有些项目不使用automake,而仅包含Makefile,而您只能运行make && sudo make install。某些Python项目仅包含setup.py,您将调用setup.py进行安装(因为没有真正的编译安装程序)。还有很多其他的构建/安装系统。希望README或INSTALL文件将确切说明该怎么做。
桑迪

3

我只想补充一下,有些软件包管理器可以从源代码编译软件包,并处理所有软件包依赖项,标志等。

在BSD系统中,它是ports使用端口集合

在Debian中,apt-get软件包管理器也可以从源代码安装:APT HOWTO:使用源软件包(Ubuntu,Linux-mint和基于Debian的所有其他软件都适用)

Gentoo发行版使用portage软件包管理器,该软件包管理器仅从源代码编译整个系统:Portage Introduction

Slackware可以编译软件包,但是我不知道那里是否有任何软件包管理器。

无论如何,您总是可以像上面提到的Sandy一样手动编译软件包=)另外,在任何其他发行版中也必须可以使用apt-getportage打包管理器...


1
说“ apt-get软件包管理器可以从源代码安装”是不正确的。引用的部分描述了如何从Debian来源创建Debian软件包。并非任意上游资源。
Faheem Mitha

2

我认为最好阅读您要安装的特定程序或应用程序随附的文档。通常,压缩包(您通常可以下载应用程序源档案)中有自述文件/自述文件,甚至还有INSTALL文件来阅读和了解安装该应用程序的首选方式。简而言之:RTFM;)


我之所以来到这里,是因为自述文件给出了在Linux下进行构建的所有要求,但只有Windows安装说明。可接受的答案对我有用,并且可能在大多数时间都有效。我认为尝试./configure路由,如果它不起作用(即缺少依赖项并且您无法读取编译器输出),则转到README几乎是更好的建议。
斯蒂芬·C

1

在FreeBSD中使用Ports集合的摘要:

查找港口

端口是按类别组织的,因此,如果您不知道端口在哪个类别中,则必须先找到它:

cd /usr/ports
make search name=myport

有时候,这样的条目太多了。我个人更喜欢:

find /usr/ports -name myport* -print -depth 2

*搜索时请使用,因为通常会有多个版本的端口可用。depth参数确保您的返回结果不会不必要地被您不想要的匹配所困扰。

组态

通常,您需要进行一些配置。Apache和Postgres等软件实际上需要它。主要有三个选择:命令行,环境和make配置文件。要开始使用命令行:

make showconfig

这将列出默认配置选项。如果您喜欢默认值,就可以编译和安装了。如果不,

make config

将弹出一个对话框,您可以在其中选择所需的选项。(不要对此感到困惑,make configure它会使用您选择的选项来配置您的端口!) 这通常就足够了,但是对于某些软件(例如Apache)而言,通常会有复杂的配置,而简单的对话框将无法处理。为此,您还应该查看Makefile,它们有时会为您提供一些make的其他目标,这些目标会给您更多信息。继续Apache示例

make show-modules
make show-options
make show-categories

将为您提供有关设置所选模块,线程选项等的信息。如果端口的默认设置大多数都很好,并且您只想更改一些内容,则还可以只传递key = value对,例如环境变量:

make MYVBL1=MYVAL1 ... install clean

另外,您可以通过以下-D选项设置开关选项:

make -D MYVAR -D MYOTHERVAR ... install clean

但是,对于复杂的配置,命令行将无法正常工作,因此最好不要使用前两种方法。在这种情况下,您可以制作一个配置文件,并将其传递给make__MAKE_CONF变量。FreeBSD有一个默认的配置文件:/etc/make.conf它通常包含有关先前安装的端口和其他系统设置的信息。首先,使用端口选项创建一个文件,调用它~/myport.mk,然后将该文件与/etc/make.conf合并:

cat /etc/make.conf ~/myport.mk >> ~/make.myport.conf

然后,您可以仔细检查您的配置:

make showconfig __MAKE_CONF=~/make.port.conf

如果一切看起来不错:

make install clean __MAKE_CONF=~/make.myport.conf

谨防!如果您需要make configure在全部或部分安装后或整个安装过程中调整配置设置,则绝对必须先清除配置

make rmconfig

否则,将导致端口子系统,端口的make默认设置和所需的配置之间发生意外交互。

总结的话很多,但是配置的复杂性主要是关于应用程序的,而不是端口。例如,Bash实际上没有任何选择。

安装

这是简单的部分:

make install clean

或者你可以

make build
make install
make clean

这只是打字。

就是这样。显然,您还可以做更多的事情,例如递归列出依赖项和配置选项,使用补丁程序进行更新等等。在这里,我将向您介绍《手册》的“ 端口”部分,端口子系统的手册页(有关其他make目标的详细信息)和手册页。make


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.