1

より一般的な質問のコンテキストとして役立つ特定の質問があります。

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を使用することを知っているので、ローカル共有コピーを表面的に持つことが最も理にかなっているようです。)

4

1 に答える 1

1

通常、find_package呼び出しにより、パッケージの「includes」フォルダーへのパスを指定する変数が生成されます。これは、を介して呼び出し元のCMakeLists.txtに追加されinclude_directoriesます。

たとえば、find_packageブーストに使用するには、次のようにします。

find_package(Boost)  # sets ${Boost_INCLUDE_DIRS} and ${Boost_LIBRARIES}
if(Boost_FOUND)
  include_directories(${Boost_INCLUDE_DIRS})
  add_executable(foo foo.cc)
  target_link_libraries(foo ${Boost_LIBRARIES})
endif()


サイドノートに関しては、既知の場所を指定してライブラリとそのヘッダーを検索するためにfind_library使用できます。find_path

これらのコマンドは両方ともPATHS、既知の場所に設定しNO_DEFAULT_PATHて検索コマンドで使用するなど、一般的な場所での検索を回避するような方法で呼び出すことができます。

もう1つの方法は、プロジェクトでこの記事ExternalProject_Addで詳しく説明されている関数を使用することです。この記事から:

このExternalProject_Add関数を使用すると、「このプロジェクトをインターネットからダウンロードし、構成手順を実行して、ビルドしてインストールする」と言うことができます。</ p>

このアプローチの欠点は、各プロジェクトがサードパーティのソースとライブラリの独自のコピーになってしまうことです。

于 2013-01-01T03:32:15.010 に答える