5

同時に複数のプロジェクトに取り組んでいます (いくつかのライブラリと、それらに依存するいくつかのゲーム)。それらはすべて GitHub の個別のリポジトリにあります。

便宜上、次のように「ワークスペース フォルダー」内のすべてのリポジトリをプルします。

/home/myWorkspace/Library1/
/home/myWorkspace/Library2/
/home/myWorkspace/Library3/
/home/myWorkspace/App1/
/home/myWorkspace/App2/

FindLibrary1FindLibrary2およびFindLibrary3.cmake ファイルがあり、順番に (「myWorkspace」フォルダーに対応する) 内のライブラリを探し、../次に/usr/lib/.

Windows では、CMake は でライブラリを検索しますがmyWorkspace/、Linux では、何があっても、インストールされたライブラリが常に最初に検出されます。

フォルダーで作業しmyWorkspace/、完了後にライブラリをインストールしたいので、CMake がmyWorkspace/フォルダー内のすべてを見つけてリンクすることをお勧めします。

/usr/lib/また、CMake にライブラリを検索してもらいたいのですが、フォルダーが/usr/local/lib/ない場合は、存在する場合はそれを優先する必要があります。myWorkspace/myWorkspace/

私が使用している CMake ファイルの例:


SSVUtils: 依存関係のないライブラリ

SSVUtils CMakeLists: https://github.com/SuperV1234/SSVUtils/blob/master/CMakeLists.txt

FindSSVUtils.cmake: https://github.com/SuperV1234/SSVUtils/blob/master/cmake/modules/FindSSVUtils.cmake


SSVUtilsJson: SSVUtils と SSVJsonCpp に依存するライブラリ

SSVUtilsJson CMakeLists: https://github.com/SuperV1234/SSVUtilsJson/blob/master/CMakeLists.txt

FindSSVUtilsJson.cmake: https://github.com/SuperV1234/SSVUtilsJson/blob/master/cmake/modules/FindSSVUtilsJson.cmake


myWorkspace/ファイルシステムパスでライブラリを見つける可能性を保ちながら、フォルダーに優先順位を付ける方法はありますか?

4

1 に答える 1

6

デフォルトでは、find_path (または find_library など) は、最初にシステム標準の場所にあるファイルをチェックしてから、PATH で提供された値を検索します。そのため、「インストールされた」ライブラリは常に Linux で最初に検出されます (ただし、インストールされたライブラリの標準的な場所がない Windows では検出されません)。

NO_CMAKE_SYSTEM_PATH オプションを使用して、この動作を無効にすることができます。標準の場所にあるファイルの検出はスキップされます。

さて... ローカル バージョンが見つからない場合に、インストール済みのライブラリをフォールバックとして使用したい場合は、次の 2 段階のプロセスで実行できます。

find_path(... NO_CMAKE_SYSTEM_PATH)

if (nothing_found)
    find_path(...)
endif()
于 2013-06-01T22:43:35.500 に答える