2017-02-03 1 views
2

私はVTK6が私のDebianマシン上にインストールされている、それは私が行うとデフォルトの検索パスは)(含ま対find_package()

$ ls /usr/lib/cmake/vtk-6.3/ 
[...] 
VTKConfig.cmake 
vtkModuleAPI.cmake 
[...] 

の下で、そのすべてのcmakeのファイルを置く

find_package(VTK) 
別のプロジェクトで

、それはすべて正常に動作します。しかし、

include(vtkModuleAPI) 

は、私はいつもfind_package()includeは、具体的CMAKE_MODULE_PATH、同じ検索パスを共有しているという印象の下にあったエラー

include could not find load file: 

    vtkModuleAPI 

が得られます。明らかにそれは正しくありません。

SET(CMAKE_MODULE_PATH "/usr/lib/cmake/vtk-6.3") 
include(vtkModuleAPI) 

が作業を行うこと

は注意してください。

また、私はCMake 3.5を使用しているので、もはやFindVTK.cmakeas it used to beではありません。

find_package()include()のデフォルトの検索パスは何ですか? vtkModuleAPI.cmakeはなぜ見つかりませんか? /usr/share/cmake/Modulesに配置する必要があります(お使いの場合には)CMakeので出荷され、(それがモジュールモードc.f. docu on find_package()うに)

答えて

1

find_package(VTK)FindVTK.cmakeを使用しています。

/usr/lib/cmake/vtk-6.3~CMAKE_MODULE_PATHを追加した後も、find_package(VTK)は同じFindVTK.cmakeモジュールを使用します。

別のFindVTK.cmakeモジュールを使用する場合は、そのFindVTK.cmakeモジュールへのパスの前にCMAKE_MODULE_PATHを追加します。

include()検索モジュールを使用しませんとだけCMAKE_MODULE_PATHにあるファイルを見ています。

+1

"find_package(VTK)はFindVTK.cmakeを使用します" - それは当てはまりません。私はそれをテストし、 '/ usr/lib/cmake/vtk-6.3/VTKConfig.cmake'を使用しています。 CMakeは 'FindVTK.cmake'を提供しません。https://cmake.org/cmake/help/v3.5/module/FindVTK.htmlを参照してください。 –

4

多くの違いがあり二つのモードfind_package、があります。FindXXX.cmakeファイルを検索しようと

  1. モジュールモードが。このファイルは、CMAKE_MODULE_PATHとCMakeがインストールされているディレクトリの下にあるディレクトリの下で検索されます。

  2. は、XXXConfig.cmakeファイルの検索を試みます。このファイルは、CMAKE_PREFIX_PATHとその他のシステム固有の変数にリストされたディレクトリの下で検索されます。(完全なアルゴリズムは、記事の冒頭にリンクされています)。 CMAKE_MODULE_PATHと特別CMakeのモジュールディレクトリ内のディレクトリだけ下

コマンドinclude検索モジュール。

ご覧のとおり、コマンドincludeとコマンドfind_packageは、のモジュールモードで同様の検索パスを使用します。しかし、あなたの場合、VTKConfig.cmakeコンフィグモードfind_packageでのみ検索され、全く異なる検索アルゴリズムを使用します。 VTKの場合


、CMakeのは、あなたがfind_package(VTK)を呼び出すときに使用されているFindVTK.cmakeファイルを、出荷しました。しかし、内部では、このスクリプトはfind_package(VTK QUIET NO_MODULE)を使用します。

この呼び出しでファイル/usr/lib/cmake/vtk-6.3/VTKConfig.cmakeが見つかると、このスクリプトが実行され、スクリプトにはvtkModuleAPI.cmakeが含まれます。

VTKConfig.cmakeがCMakeによって見つけられていない場合は、VTK_DIRを変数/usr/lib/cmake/vtk-6.3/に設定して助けてください。

[CMake-3.1から始まって、FindVTK.cmakeはCMakeと一緒に出荷されないので、find_package(VTK)はすぐにVTKConfig.cmakeの位置を見つけようとします。いずれの場合においても


、ディレクトリ/usr/lib/cmake/vtk-6.3/のモジュールは直接含めるべきではありません。このディレクトリには、VTKのためプライベートです。

+1

CMakeは 'FindVTK.cmake'を提供しません。 https://cmake.org/cmake/help/v3.5/module/FindVTK.htmlを参照してください。 –

+0

情報ありがとう、私はそのことについての考えを投稿に追加しました。 – Tsyvarev

+2

投稿の第2部分は最後の文に凝縮できると思います。それをバックアップしても大丈夫でしょうか。インクルードの問題は、ParaView、btw(https://github.com/Kitware/ParaView/blob/master/CMakeLists.txt#L576)にあります。 - VTKとCMakeを作った会社。 (それは彼らが常に正しくそれを使用していることを意味しません) –

関連する問題