如何正确处理本地构建的二进制文件?

sta*_*ant 2 compiling settings path environment-variables bashrc

我倾向于从源代码构建二进制文件。我通常的设置如下

$HOME/build -> this gets the sources
$HOME/programs -> this is where the build happen, so where the binaries are
Run Code Online (Sandbox Code Playgroud)

完成后,我将以下内容放入我的 bashrc

export MYNEWBINDIR = $HOME/programs/...
export PATH=$MYNEWBINDIR:$PATH
Run Code Online (Sandbox Code Playgroud)

我的问题是:这是推荐的方式吗?例如,我可以创建一个 local $HOME/bin,符号链接那里的所有二进制文件,然后将其添加到路径中...

Kus*_*nda 7

或多或少取决于个人按照他们的意愿去做,但我建议您始终保留基本系统或任何包管理器已经使用的目录。您真的不想通过覆盖以前安装的文件来混淆包管理器!所以绝对不要管/bin

在大多数系统上,这/usr/local 应该是您安装东西的安全区域,尽管这也被某些系统上的包管理器使用(例如 FreeBSD 和 OpenBSD,因为它们将从端口/包安装的软件视为本地软件。

另请参阅维基百科中的条目“文件系统层次结构标准”和“ Unix 文件系统”。

一些 Unices 还提供您可以参考的hier(7)手册。(链接指向 OpenBSD 的版本,但它也至少在 Linux 中的 Ubuntu 上可用。在 OpenBSD 的情况下,它记录了系统软件知道的目录,因此它没有提及/opt,例如)。

您在哪里构建东西并不重要,因为它是一个目录,无论如何您都可能在完成后删除它。不过,最好远离实际的安装目录。我曾研究过在/bin和 中有源树的系统/usr/local,这非常不整洁。

我还建议您make install对软件进行实际操作,而不是从构建目录中运行可执行文件,除非您正在调整构建。将可执行文件收集在一个位置可以使您的PATH设置更清晰、更容易,除非您确实希望PATH每个软件都有一个不同的元素,显然。


个人意见如下:

对于我专门为自己构建的软件,我倾向于使用私有层次结构$HOME/local进行安装。

当编译使用 GNU 自动工具并因此具有configure脚本的程序时,这真的很容易。你只是说

$ ./configure --prefix="$HOME/local"
Run Code Online (Sandbox Code Playgroud)

在配置阶段,之前makemake install.

在编译使用 CMake 的程序时,可以通过

$ cmake -DCMAKE_INSTALL_PREFIX="$HOME/local" .
Run Code Online (Sandbox Code Playgroud)

makemake install步骤之前。安装 Perl 模块等时可能会产生相同的效果(通过其他方式)。

那么你显然必须添加$HOME/local/bin到你的路径中......

就个人而言,我也使用GNU Stow,这意味着我并没有真正指定$HOME/local为安装前缀,而是$HOME/local/stow/thing-2.1在配置软件包时指定thing-2.1

安装后:

$ cd "$HOME/local/stow"
$ stow thing-2.1
Run Code Online (Sandbox Code Playgroud)

$HOME/local/stow/thing-2.1/bin目录的内容将显示(使用符号链接)$HOME/local/bin(对于lib安装在 下的任何或其他目录也是如此thing-2.1)。

Stow 使卸载软件变得非常容易。不需要make install为了卸载和删除一个软件而去寻找一个人安装的每个小文件,而只是

$ cd "$HOME/local/stow"
$ stow -D thing-2.1
$ rm -rf thing-2.1
Run Code Online (Sandbox Code Playgroud)