[vtk-developers] find_package( VTK ) and relative path
David Cole
david.cole at kitware.com
Mon Sep 19 10:17:19 EDT 2011
On Mon, Sep 19, 2011 at 9:22 AM, Arnaud Gelas
<arnaud_gelas at hms.harvard.edu> wrote:
> Hi all,
>
> In one CMakeLists.txt, I have
>
> find_package( VTK REQUIRED )
> if( VTK_FOUND )
> include( ${VTK_USE_FILE} )
> endif()
>
> if I provide VTK_DIR by using a relative path, it does not work (see error
> message below); if I enter the full path it works.
>
> This is the error message:
>
> CMake Error at /opt/local/share/cmake-2.8/Modules/FindVTK.cmake:135
> (MESSAGE):
> VTK not found. Set the VTK_DIR cmake cache entry to the directory
> containing VTKConfig.cmake. This is either the root of the build tree, or
> PREFIX/lib/vtk for an installation. For VTK 4.0, this is the location of
> UseVTK.cmake. This is either the root of the build tree or
> PREFIX/include/vtk for an installation.
> Call Stack (most recent call first):
> Exercises/LevelSets/Source/CMakeLists.txt:13 (find_package)
>
>
> This could have been fine and understandable if it was the same behavior for
> ITK, but it's not...
>
> i.e.
>
> find_package( ITK REQUIRED )
> if( ITK_FOUND )
> include( ${ITK_USE_FILE} )
> endif()
>
> if a relative path is provided, it does work.
>
> I use CMake 2.8.5, I build the master branch of VTK myself with the same
> version of CMake...
>
> Can someone explain to me what's the difference in between ITK and VTK with
> respect to find_package? why is it working for one and not the other one?
> If relative paths are not supported, why doesn't it warn users?
>
> Thanks,
> Arnaud
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtk-developers
>
>
You should use absolute full paths for VTK_DIR, ITK_DIR, or any other
variable that is supposed to tell find_package where something is.
Think about it: what would it *relative to* ...?
In the context of a CMakeLists.txt file, sometimes a relative path
expression is interpreted as relative to CMAKE_CURRENT_SOURCE_DIR,
sometimes to CMAKE_CURRENT_BINARY_DIR, and sometimes simply as
relative to whatever the current working directory is.
Which one is it for a find_package call? It's indeterminate, so you
should always specify VTK_DIR and ITK_DIR (and similar) variables as
full paths.
We probably should warn about this, but it hasn't been a widespread
problem (to the best of my knowledge).
File a bug report / feature request for CMake to warn about it if you
feel strongly about it.
Thanks,
David C.
More information about the vtk-developers
mailing list