ローカルにビルドされたバイナリを正しく処理する方法は?

ローカルにビルドされたバイナリを正しく処理する方法は?

私はソースからバイナリを作成する傾向があります。私の通常の設定は次のとおりです

$HOME/build -> this gets the sources
$HOME/programs -> this is where the build happen, so where the binaries are

完了したら、bashrc

export MYNEWBINDIR = $HOME/programs/...
export PATH=$MYNEWBINDIR:$PATH

私の質問は:これが推奨される方法ですか?たとえば、ローカルを作成し、$HOME/binそこにあるすべてのバイナリをシンボリックリンクしてからパスに追加できます。

ベストアンサー1

必要なことはある程度個人によって異なりますが、基本システムまたはパッケージマネージャがすでに使用しているディレクトリを常に維持することをお勧めします。以前にインストールされたファイルを上書きしてパッケージマネージャを混乱させたくないでしょう。したがって、必ず一人で/bin残してください。

ほとんどのシステムでは/usr/local しなければならない一部のシステム(FreeBSDやOpenBSDなど)のパッケージマネージャも、ポート/パッケージにインストールされているソフトウェアをローカルソフトウェアとして扱うため、この領域を使用しますが、製品をインストールする安全な領域です。

「アイテムも参照してください。ファイルシステム階層標準「そして」Unixファイルシステム「ウィキペディアで。

いくつかのユニセスもあります。hier(7)手動参考にしてください。 (リンクはOpenBSDのバージョンを指していますが、少なくともLinuxのUbuntuでも使用できます。OpenBSDの場合は、システムソフトウェアが認識するディレクトリを文書化するため、たとえば言及しません。/opt

タスクが完了すると削除できるディレクトリなので、コンテンツをどこに構築するかは問題ではありません。ただし、実際のインストールディレクトリから離れているのが最善です。私は/binとソースツリーを持つシステムで作業しましたが、/usr/localとても乱雑でした。

make installまた、ビルドを調整しない限り、ビルドディレクトリで実行可能ファイルを実行するよりも実際にソフトウェアで作業することをお勧めします。PATH実際に実行可能ファイルを収集しない限り、場所に実行可能ファイルを収集すると、設定がよりきれいで簡単になります。考えるPATH明らかに、すべてのソフトウェアには独自の要素があります。


私の個人的な意見は次のとおりです。

私自身のために特別に作成されたソフトウェアの場合は、インストールに個人階層を使用する傾向があります$HOME/local

GNU自動ツールを使用してスクリプトを含むプログラムをコンパイルするときは、これは非常に簡単ですconfigure。ただ言う

$ ./configure --prefix="$HOME/local"

構成段階で前makemake install

CMakeを使用してプログラムをコンパイルすると、次の方法で同じ結果が得られます。

$ cmake -DCMAKE_INSTALL_PREFIX="$HOME/local" .

make前とステップmake install。 Perlモジュールなどをインストールすると(他の方法で)同じ効果が発生する可能性があります。

その場合は、明らかに$HOME/local/binパスに追加する必要があります...

個人的にはGNUストーまた、実際には$HOME/localインストールプレフィックスとして指定するのではなく、$HOME/local/stow/thing-2.1パッケージを構成するときに指定することを意味しますthing-2.1

インストール後:

$ cd "$HOME/local/stow"
$ stow thing-2.1

そのディレクトリの内容が表示されます(シンボルリンクを使用して)($HOME/local/stow/thing-2.1/bin以下にインストールされているすべてのディレクトリについても$HOME/local/bin同様です)。libthing-2.1

Stowはとても簡単です削除ソフトウェア。make install単にソフトウェアを削除して削除するために人がインストールしたすべての小さなファイルを追跡するのではなく、

$ cd "$HOME/local/stow"
$ stow -D thing-2.1
$ rm -rf thing-2.1

おすすめ記事