[vtk-developers] Repeated calls to find_package(VTK COMPONENTS ...)

Marcus D. Hanwell marcus.hanwell at kitware.com
Tue Sep 9 14:18:11 EDT 2014


Pushing this a little further, to see if we can build executables in
the same directory with multiple calls, the following worked for me
locally,

cmake_minimum_required(VERSION 3.0)

find_package(VTK COMPONENTS vtkChartsCore vtkRenderingContextOpenGL NO_MODULE)
message(STATUS "LIBS: ${VTK_LIBRARIES}")
message(STATUS "DEFS: ${VTK_DEFINITIONS}")
add_executable(testexe test.cxx)
set_property(TARGET testexe APPEND
  PROPERTY COMPILE_DEFINITIONS "${VTK_DEFINITIONS}")
set_property(TARGET testexe APPEND
  PROPERTY INCLUDE_DIRECTORIES ${VTK_INCLUDE_DIRS})
target_link_libraries(testexe ${VTK_LIBRARIES})

find_package(VTK COMPONENTS vtkCommonCore NO_MODULE)
message(STATUS "LIBS: ${VTK_LIBRARIES}")
message(STATUS "DEFS: ${VTK_DEFINITIONS}")
add_executable(testexe2 test2.cxx)
set_property(TARGET testexe2 APPEND
  PROPERTY COMPILE_DEFINITIONS "${VTK_DEFINITIONS}")
set_property(TARGET testexe2 APPEND
  PROPERTY INCLUDE_DIRECTORIES ${VTK_INCLUDE_DIRS})
target_link_libraries(testexe2 ${VTK_LIBRARIES})

Producing the output,

-- LIBS: vtkChartsCore;vtkCommonColor;vtkCommonDataModel;vtkCommonMath;vtkCommonCore;vtksys;vtkCommonMisc;vtkCommonSystem;vtkCommonTransforms;vtkInfovisCore;vtkFiltersExtraction;vtkCommonExecutionModel;vtkFiltersCore;vtkFiltersGeneral;vtkCommonComputationalGeometry;vtkFiltersStatistics;vtkImagingFourier;vtkImagingCore;vtkalglib;vtkRenderingContext2D;vtkRenderingCore;vtkFiltersGeometry;vtkFiltersSources;vtkRenderingFreeType;vtkfreetype;vtkzlib;vtkftgl;vtkRenderingContextOpenGL;vtkRenderingOpenGL;vtkImagingHybrid;vtkIOImage;vtkDICOMParser;vtkIOCore;vtkmetaio;vtkjpeg;vtkpng;vtktiff
-- DEFS: vtkRenderingContext2D_AUTOINIT=1(vtkRenderingContextOpenGL);vtkRenderingCore_AUTOINIT=2(vtkRenderingFreeType,vtkRenderingOpenGL)
-- LIBS: vtkCommonCore;vtksys
-- DEFS:
-- Configuring done
-- Generating done
-- Build files have been written to: /home/marcus/build/vtkcomponents

So the definitions were empty, as you would hope, in the second call,
the mains were very simple instantiating a vtkRenderWindow in the
first which resulted in a vtkXOpenGLRenderWindow class being
instantiated as the overrides kicked in for that target. Most projects
I know of that make multiple calls tend to use directories for each
target, and make the calls in sibling directories, but it looks like
you should be able to call it multiple times in the same scope (on
Linux with VTK master at least).

On Tue, Sep 9, 2014 at 1:53 PM, Marcus D. Hanwell
<marcus.hanwell at kitware.com> wrote:
> Adding you both to CC in case you aren't subscribed, it might also be
> worth appending NO_MODULE to the calls to ensure find modules aren't
> used, i.e. find_package(VTK COMPONENTS vtkChartsCore NO_MODULE). The
> wiki page at http://www.vtk.org/Wiki/VTK/Build_System_Migration#Finding_and_Linking_to_VTK
> contains advice I added, but didn't specifically cover multiple calls.
> Including the use file, or setting the DIRECTORY property will of
> course cause issues if you are not using separate directory scopes for
> each target.
>
> On Tue, Sep 9, 2014 at 1:23 PM, Marcus D. Hanwell
> <marcus.hanwell at kitware.com> wrote:
>> Hi,
>>
>> Moving this discussion from
>> http://review.source.kitware.com/#/c/16703/ to the mailing list. As I
>> was saying I do not see precisely what you see, the repeated calls
>> seem to work for me locally. I would not expect the call without
>> COMPONENTS to work, and am not sure we should support calling with and
>> without COMPONENTS.
>>
>> I have a minimal CMake script,
>>
>> cmake_minimum_required(VERSION 3.0)
>>
>> find_package(VTK COMPONENTS vtkChartsCore)
>> message(STATUS "LIBS: ${VTK_LIBRARIES}")
>>
>> find_package(VTK COMPONENTS vtkCommonCore)
>> message(STATUS "LIBS: ${VTK_LIBRARIES}")
>>
>> find_package(VTK COMPONENTS vtkCommonMath)
>> message(STATUS "LIBS: ${VTK_LIBRARIES}")
>>
>> find_package(VTK COMPONENTS vtkChartsCore)
>> message(STATUS "LIBS: ${VTK_LIBRARIES}")
>>
>> find_package(VTK)
>> message(STATUS "LIBS: ${VTK_LIBRARIES}")
>>
>> This results in the output,
>>
>> $ cmake -DVTK_DIR:PATH=/home/marcus/build/VTK .
>> -- The C compiler identification is GNU 4.9.1
>> -- The CXX compiler identification is GNU 4.9.1
>> -- Check for working C compiler: /usr/bin/cc
>> -- Check for working C compiler: /usr/bin/cc -- works
>> -- Detecting C compiler ABI info
>> -- Detecting C compiler ABI info - done
>> -- Check for working CXX compiler: /usr/bin/c++
>> -- Check for working CXX compiler: /usr/bin/c++ -- works
>> -- Detecting CXX compiler ABI info
>> -- Detecting CXX compiler ABI info - done
>> -- LIBS: vtkChartsCore;vtkCommonColor;vtkCommonDataModel;vtkCommonMath;vtkCommonCore;vtksys;vtkCommonMisc;vtkCommonSystem;vtkCommonTransforms;vtkInfovisCore;vtkFiltersExtraction;vtkCommonExecutionModel;vtkFiltersCore;vtkFiltersGeneral;vtkCommonComputationalGeometry;vtkFiltersStatistics;vtkImagingFourier;vtkImagingCore;vtkalglib;vtkRenderingContext2D;vtkRenderingCore;vtkFiltersGeometry;vtkFiltersSources;vtkRenderingFreeType;vtkfreetype;vtkzlib;vtkftgl
>> -- LIBS: vtkCommonCore;vtksys
>> -- LIBS: vtkCommonMath;vtkCommonCore;vtksys
>> -- LIBS: vtkChartsCore;vtkCommonColor;vtkCommonDataModel;vtkCommonMath;vtkCommonCore;vtksys;vtkCommonMisc;vtkCommonSystem;vtkCommonTransforms;vtkInfovisCore;vtkFiltersExtraction;vtkCommonExecutionModel;vtkFiltersCore;vtkFiltersGeneral;vtkCommonComputationalGeometry;vtkFiltersStatistics;vtkImagingFourier;vtkImagingCore;vtkalglib;vtkRenderingContext2D;vtkRenderingCore;vtkFiltersGeometry;vtkFiltersSources;vtkRenderingFreeType;vtkfreetype;vtkzlib;vtkftgl
>> -- LIBS: vtkChartsCore;vtkCommonColor;vtkCommonDataModel;vtkCommonMath;vtkCommonCore;vtksys;vtkCommonMisc;vtkCommonSystem;vtkCommonTransforms;vtkInfovisCore;vtkFiltersExtraction;vtkCommonExecutionModel;vtkFiltersCore;vtkFiltersGeneral;vtkCommonComputationalGeometry;vtkFiltersStatistics;vtkImagingFourier;vtkImagingCore;vtkalglib;vtkRenderingContext2D;vtkRenderingCore;vtkFiltersGeometry;vtkFiltersSources;vtkRenderingFreeType;vtkfreetype;vtkzlib;vtkftgl
>> -- Configuring done
>> -- Generating done
>> -- Build files have been written to: /home/marcus/build/vtkcomponents
>>
>> As far as I can see this gives the libraries one would expect, i.e.
>> vtkChartsCore, vtkCommonCore, vtkCommonMath, vtkChartsCore, and the
>> final one is incorrect but I am not sure of the value in supporting
>> mixed COMPONENTS and non-components versions of find_package.
>>
>> Let me know if there is something I am missing, is this possibly with
>> an older version of VTK (I am testing with master).
>>
>> Marcus



More information about the vtk-developers mailing list