Linuxの初心者ですが、C++の初心者ではありません。 CMakeを使用して、いくつかのサードパーティコンポーネントを含むクロスプラットフォームゲームエンジンをプリコンパイルしていますが、ライブラリの使用については多くの疑問があります。私の質問は、サードパーティのライブラリを使用する方法とそれらをどこに置くかです。 Aptは公式の場所(/ usr/local、/ usr/lib/..)にlibsをインストールしますが、プロジェクトdirのフォルダーにあるローカルlibsを使用してWindowsで開発しています。
また、ライブラリがどのように機能するかのルールを理解するための優れたチュートリアルも必要です。たとえば、プロジェクトをコンパイルしようとすると、luabindはliblua.s0.1を要求しますが、AFAIKには、Luaが提供するソースを使用してこのライブラリを生成する方法がありません(少なくともmake、make installを実行します)。
確かに、この質問はあいまいですが、もっと簡潔にするのに十分な経験がありません。
更新:いくつかの回答を読んだ後、より簡潔な質問は次のとおりです。すべてのサードパーティライブラリをインストールした場合、プログラムをどのように配布できますか?大きなreadmeを使用せずに依存関係を管理するにはどうすればよいですか?
ライブラリを置く場所
最善の解決策は、Linuxディストリビューションのパッケージシステム(_apt-get
_、yum
など)を使用して、可能な限りディストリビューションが提供するパッケージからライブラリをインストールすることです。
ディストリビューションのパッケージ化されたライブラリーが最新バージョンではない場合、または非標準のビルドオプションが必要な場合、またはディストリビューションが提供していないライブラリーが必要な場合は、自分でビルドしてインストールできます。ライブラリを配置する場所には、主に2つのオプションがあります。
/usr/local
_(_/usr/local/lib
_のライブラリ、_/usr/local/include
_のヘッダ)。これにより、システム全体にライブラリがインストールされ、追加の手順を実行せずにライブラリをビルドできるため、おそらく最も簡単なソリューションです。ライブラリを_/usr
_の直下にインストールしないでください。これは、ディストリビューションのパッケージシステムに干渉するためです。LD_LIBRARY_PATH
_または_ld.so.conf
_を使用-詳細はリンクを参照してください)。ライブラリの仕組み
David A. Wheelerの優れた Programming Library HOWTO を参照してください。それを読んでから、特定の質問を新しいトピックとして投稿することをお勧めします。
プログラムの配布方法
伝統的に、Unix/Linuxプログラムはそれらの依存関係のコピーを含みません。代わりに、これらの依存関係を自分でインストールするかどうかは、エンドユーザーまたは開発者次第です。あなたが言ったように、これは「大きなREADME」を必要とするかもしれませんが、いくつかの利点があります:
プログラムをエンドユーザーに配布する場合は、ソースを使用せずに簡単にダウンロードしてインストールできるパッケージ(_.dpkg
_または_.rpm
_)を提供することを検討してください。理想的には、エンドユーザーの観点から、パッケージはディストリビューションのリポジトリに追加され(オープンソースであるか、少なくとも無料で入手できる場合)、ユーザーがパッケージマネージャー(_apt-get
_またはyum
)を使用してパッケージをダウンロードできるようにします。 Linuxディストリビューションが多数あるため、これはすべて複雑になる可能性がありますが、Debian/Ubuntu互換の_.dpkg
_およびRed Hat/CentOS/Fedora互換の_.rpm
_は、かなりの割合のエンドをカバーするはずですユーザー。パッケージの構築はそれほど難しくはなく、オンラインには優れたハウツーがあります。
windowsに関する質問の最初の部分については、Windowsのライブラリ/ヘッダーには実際の標準的な場所はないため、簡単な解決策は自分で作成することです。システムに単一のlib /とinclude /を提供し、すべてのプロジェクトでそれを使用する(どこにでも含めるcmakeファイルにパスを設定する)。そこにサードパーティのライブラリをすべて入れます。次に例を示します。
あなたのプロジェクト:
d:/projects/projectA
d:/projects/projectB
サードパーティのもの:
d:/api/lib/lua.lib
d:/api/include/lua/....
(バージョンが異なる場合は、シンボリックリンク(別名「ディレクトリジャンクション」)を使用することもできます)
および対応するcmakeファイル:
include_directories( d:/api/include )
link_directories( d:/api/lib )
さて、これは基本的な質問の1つであり、私自身はこれについてあまり明確に出くわさないかもしれませんが、ここに行きます:
それが基本です。
特定のライブラリーがある場合は、それらを独自のプロジェクト固有のlib/
およびinclude/
ディレクトリーに追加し、インクルードパスとライブラリーパスにそれぞれ追加できます。
これらのパスへのディレクトリの追加は、プロジェクトの構築方法に応じて、さまざまな方法で実行できます。このすべてにLD_PATHと呼ばれるものがあると確信しています...しかし、CMakeに関連する詳細は本当にわかりません。
少しグーグルすると、CMakeを使用して上記を実行できます。
それが役に立てば幸い
jrh
パッケージマネージャーを使用してライブラリをインストールする場合、ライブラリはすべて適切な場所に配置されます。そうでない場合は、-L <path>
フラグを使用して追加の検索パスを提供することにより、コンパイラにを検索させることができます。この追加のフラグをCMakeに渡すことができるはずです。
ちなみに、-I <path>
は、インクルードファイルを検索するためのディレクトリを追加するために使用できます。