2

先日、VM に Ubuntu のインストールをセットアップし、主に C++ でプログラミングするために必要と思われるツールとライブラリを集めに行きました。

ただし、サードパーティのソース ライブラリなどをどこに配置するかという問題がありました。私が収集できる限り、多くのソース ディストリビューションは、多くの依存関係が特定の場所に既にインストールされていると想定しており、多くのツールも特定の場所にインストールされます。

私が現在 Windows で行っていることの例を挙げると、すべてのソース コードを保持するディレクトリがあります。C:\code. このディレクトリには、すべてのサードパーティ ライブラリのディレクトリがありますc:\code\thirdparty\libs。このようにして、私が書いた、または見つけてコンパイルしたいプロジェクトのすべての依存関係の相対パスを簡単に設定できます。私が Linux プログラミング環境のセットアップに興味を持っている理由は、ツールとライブラリの依存関係の問題が効率的に解決され、たとえばソースから OpenSSH を簡単にビルドできるようになったように見えるからです。

そのため、私が探していたのは、Linux でプロジェクトとライブラリを整理しようとするときに使用できる、保守が容易で使いやすい適切な規則でした。

4

4 に答える 4

7

簡単な答え:「ローカルディレクトリに大量のコードを入れる」ことはしないでください。

長い答え:「ローカルディレクトリに大量のコードを格納する」ことはしないでください。最新の状態に保つのは悪夢であり、コードを配布することにした場合は、適切なコードをパッケージ化するのは悪夢です。分布。

可能な限り、ディストリビューションに同梱されているライブラリを使用してください(ubuntuには20000以上のパケットがあり、必要なもののほとんどが事前にパッケージ化されている必要があります)。パッケージがない場合は、手動で/ usr / localにインストールできます(ただし、アップグレードについては上記を参照してください。これは行わないでください)。

「stow」または「installwatch」(または両方)を使用してライブラリごとのディレクトリ(/ usr / local / stow / libA-ver123)にインストールし、そこから/ usr/localまたは/usr/(stow)にファイルをシンボリックリンクすることをお勧めします。シンボリックリンク部分を行います)。または、ディストリビューション用にlibをパッケージ化します。

于 2008-10-21T21:58:54.790 に答える
5

ライブラリ/インクルードの場合...

/usr/local/lib
/usr/local/include
于 2008-10-21T21:51:35.570 に答える
3

可能な場合、システム/ディストリビューションが提供するライブラリに対するコード。これにより、そのディストリビューションで製品を出荷するのが簡単になります。

ただし、商用アプリケーションを構築している場合、Linux ディストリビューションには非常に多くのフレーバーがあるため、ディストリビューションごとに多数の異なるアプリケーション ビルドを維持する必要があります。これは、ディストリビューションのパッケージ管理システムとよりクリーンに統合できることを意味するため、必ずしも悪いことではありません。

ただし、それができない場合は、所有している各サードパーティの依存関係のソースをダウンロードし、その依存関係の構築を実行可能ファイルにリンクされている静的ライブラリに統合するのはかなり簡単なはずです。そうすれば、リンク先を正確に把握できますが、実行可能ファイルのサイズが肥大化するという欠点があります。これは、ディストリビューションによって提供されていない特定のライブラリ (またはバージョン) が必要な場合にも必要になることがあります。

コードをさまざまな異なる Unix システムで構築したい場合は、おそらく GNU autoconfautomakeを検討するのが賢明でしょう。これらは、実質的にすべての Unix システム上でビルドできるように、configureスクリプトを作成し、プロジェクト用に作成するのに役立ちます。makefile

また、適切なライブラリ (pkg-config をサポートするライブラリの場合) を含めてリンクするのに役立つように、現在 Linux ディストリビューションでかなり使用されているpkg-configも調べてください。

Subversion を使用してソースを管理している場合、ほとんどの Subversion リポジトリが独自のコードと「ベンダー」コードを管理するために使用する「規則」があります。

ほとんどの svn リポジトリには「ベンダー」ツリーがあります (トランク、ブランチ、タグ ツリーと一緒です)。これは、すべてのサードパーティ ベンダー コードのトップです。そのディレクトリには、使用する各ライブラリのディレクトリがあります。例えば:

branches/
tags/
trunk/
vendor/somelib
vendor/anotherlib

これらの各ライブラリの下には、各ライブラリ バージョンのディレクトリと、リポジトリ内の最新バージョンの「現在の」ディレクトリがあります。

vendor/somelib/1.0
vendor/somelib/1.1
vendor/somelib/current

次に、プロジェクトのツリーは次のようにレイアウトする必要があります。

Trunk/source # すべてのコードをここに配置 Trunk/libs # すべてのベンダー コードをここに配置

libs ディレクトリは空である必要がありますが、次の方法でsvn:externalsメタデータが関連付けられています。

svn propedit svn:externals trunk/libs

このプロパティの内容は次のようになります (Subversion 1.5 を想定):

^/vendor/somelib/current   somelib
^/vendor/anotherlib/1.0    anotherlib

つまり、コード サブバージョンをチェックアウトすると、ベンダー ライブラリもトランク/libs ディレクトリにチェックアウトされます。チェックアウトすると、次のようになります。

trunk/source
trunk/libs/somelib
trunk/libs/anotherlib

これは、 Subversion Bookで説明されています (おそらくはるかに優れています) 。特に、ベンダー ブランチ外部の処理に関するセクション。

于 2008-10-22T09:15:49.573 に答える
1

Ubuntu = Debian = apt-get goodness

Linux ユーティリティから始めます。

%> sudo apt-get install util-linux
于 2008-10-21T21:56:10.880 に答える