より一般的な質問のコンテキストとして役立つ特定の質問があります。
LAMMPSと呼ばれる科学的なパッケージがあり、通常は実行可能ファイルとして使用されます。ただし、「ライブラリ」としての使用はサポートしています。物事を正しく行うために、私はそれを/ usr / local / lib/lammpsに入れました。lammps / src /ディレクトリが含まれており、約40のソースファイルがあります。提供された手順を使用して、lammpsを.soファイルとしてlammps / src/liblammps_serial.soにコンパイルしました。
「〜/ code /ljtube/」にも別のコードがあります。これは、cmakeを使用してライブラリを見つけようとします。したがって、私はFindLAMMPS.txtを作成して、使用できるようにしました。
FIND_PACKAGE (lammps)
私のCMakeListsで。/ usr /local/を正常に検索するようにlibtool構成ファイルを変更しました。/ usr / local / lib /で.soファイルを検索し、/ usr / local /include/で.hファイルを検索することがわかりました。そこで、/ usr / local / lib /内の.soファイルへの動的リンクを作成し、.hファイルをlammps /src/から/usr/ local /include/にコピーしました。
CMakeはこれら2つのファイルを見つけることができますが、lammps /src/内の他のファイルにリンクすることはできません。含めたい.h(group.h、fix.h、force.h、pair.hなど)ごとに個別のFIND_PACKAGEを作成する必要があるのはばかげているようです。また、.hファイルのパッケージ全体を/ usr / local /include/ディレクトリにダンプするのはばかげているようです。このコードをローカルとクラスターの両方で使用し、場合によっては他のグループメンバーに配布します。
/ usr / local / lib / lammps / src /の場所にハードコーディングせずに、CMakeに見つけたいものを見つけさせるにはどうすればよいですか?より一般的に言えば、元の開発者が最良の規則を使用していなくても、これらのような大きなパッケージを管理して、作成したコードで簡単にリンクできるようにするにはどうすればよいですか?
(ちなみに、私は共有ライブラリを使用しています。これは正しい選択のようですが、特に結婚しているわけではありません。静的ライブラリを使用する必要がありますか?CMakeがコンパイル済みのライブラリを見つける方法はありますか?現在のソースディレクトリに相対的なライブラリであり、これを実装するためのより良い方法でしょうか?複数のプロジェクトでLAMMPSを使用することを知っているので、ローカル共有コピーを表面的に持つことが最も理にかなっているようです。)