Discussion:
[ITK-users] VS input library files
Gib Bogle
2017-08-22 04:02:14 UTC
Permalink
I am building applications using ITK on Windows 7, with cmake and Visual Studio 2010. The CMakeLists.txt file is very simple:


PROJECT(compress)
FIND_PACKAGE(ITK)
IF(ITK_FOUND)
INCLUDE(${ITK_USE_FILE})
ELSE(ITK_FOUND)
MESSAGE(FATAL_ERROR
"ITK not found. Please set ITK_DIR.")
ENDIF(ITK_FOUND)

set(PROJECTNAME "compress")
ADD_EXECUTABLE(${PROJECTNAME} compress.cpp)
TARGET_LINK_LIBRARIES(${PROJECTNAME} ${ITK_LIBRARIES} )


and the cmake command is:


cmake -G "Visual Studio 10 Win64"


The .vcproj file created has, in the Linker > Input > Additional Dependencies list not only what looks like all the ITK libraries (about 78) but also a whole lot of VTK libraries (about 35) and 3 Qt libraries. This is for a program that uses neither VTK nor Qt. I don't understand why all these libraries are included. I guess it doesn't really matter, since they don't finish up in the .exe, but it is a nuisance because for some reason the Qt libraries that it expects are a different version from those on the computer, which means I have to either delete those libraries from the list or change the version number. If I was having to do this just a couple of times it wouldn't be worth worrying about, but I am rebuilding on a new machine a large number of programs that all have this issue.


It would help to have a better understanding of the system that generates this list. Maybe there is a simple way to prevent unwanted libraries from getting into the list.
Francois Budin
2017-08-22 13:32:39 UTC
Permalink
Hello Gib,

It seems that you built ITK with the VTK bridge (CMake option
Module_ITKVtkGlue), and you probably built VTK with Qt support. It is
surprising that the Qt libraries do not match the Qt version on your
computer. Did you build VTK on a different computer?
To be able to compile any project that you link against ITK, CMake needs to
know of all the dependencies of ITK. Because ITK is still using the CMake 2
paradigm (project based dependencies, vs CMake 3 that is target based), if
you do not specify which module needs to be loaded, all the dependencies
will be added to all your targets.
If you want to limit the number of dependencies, you can specify the ITK
components that are loaded by CMake:
find_package(ITK COMPONENTS {add required components here} )

Another solution is to rebuild ITK without VTK support.
Hope this helps,
Francois

On Tue, Aug 22, 2017 at 12:02 AM, Gib Bogle <***@auckland.ac.nz> wrote:

> I am building applications using ITK on Windows 7, with cmake and Visual
> Studio 2010. The CMakeLists.txt file is very simple:
>
>
> PROJECT(compress)
> FIND_PACKAGE(ITK)
> IF(ITK_FOUND)
> INCLUDE(${ITK_USE_FILE})
> ELSE(ITK_FOUND)
> MESSAGE(FATAL_ERROR
> "ITK not found. Please set ITK_DIR.")
> ENDIF(ITK_FOUND)
>
> set(PROJECTNAME "compress")
> ADD_EXECUTABLE(${PROJECTNAME} compress.cpp)
> TARGET_LINK_LIBRARIES(${PROJECTNAME} ${ITK_LIBRARIES} )
>
>
> and the cmake command is:
>
>
> cmake -G "Visual Studio 10 Win64"
>
>
> The .vcproj file created has, in the Linker > Input > Additional
> Dependencies list not only what looks like all the ITK libraries (about 78)
> but also a whole lot of VTK libraries (about 35) and 3 Qt libraries. This
> is for a program that uses neither VTK nor Qt. I don't understand why all
> these libraries are included. I guess it doesn't really matter, since they
> don't finish up in the .exe, but it is a nuisance because for some reason
> the Qt libraries that it expects are a different version from those on the
> computer, which means I have to either delete those libraries from the list
> or change the version number. If I was having to do this just a couple of
> times it wouldn't be worth worrying about, but I am rebuilding on a new
> machine a large number of programs that all have this issue.
>
>
> It would help to have a better understanding of the system that generates
> this list. Maybe there is a simple way to prevent unwanted libraries from
> getting into the list.
>
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.php
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/insight-users
>
>
Gib Bogle
2017-08-22 19:08:36 UTC
Permalink
Thanks Francois, that makes it all clear. Yes, I did build VTK on a different computer, and have upgraded Qt. Since it is simpler to just delete the unwanted Qt libraries in VS than to customise all the cmake files, I'll just stick to what I'm doing.


Cheers, Gib

________________________________
From: Francois Budin <***@kitware.com>
Sent: Wednesday, 23 August 2017 1:32 a.m.
To: Gib Bogle
Cc: insight-***@itk.org
Subject: Re: [ITK-users] VS input library files

Hello Gib,

It seems that you built ITK with the VTK bridge (CMake option Module_ITKVtkGlue), and you probably built VTK with Qt support. It is surprising that the Qt libraries do not match the Qt version on your computer. Did you build VTK on a different computer?
To be able to compile any project that you link against ITK, CMake needs to know of all the dependencies of ITK. Because ITK is still using the CMake 2 paradigm (project based dependencies, vs CMake 3 that is target based), if you do not specify which module needs to be loaded, all the dependencies will be added to all your targets.
If you want to limit the number of dependencies, you can specify the ITK components that are loaded by CMake:
find_package(ITK COMPONENTS {add required components here} )

Another solution is to rebuild ITK without VTK support.
Hope this helps,
Francois

On Tue, Aug 22, 2017 at 12:02 AM, Gib Bogle <***@auckland.ac.nz<mailto:***@auckland.ac.nz>> wrote:

I am building applications using ITK on Windows 7, with cmake and Visual Studio 2010. The CMakeLists.txt file is very simple:


PROJECT(compress)
FIND_PACKAGE(ITK)
IF(ITK_FOUND)
INCLUDE(${ITK_USE_FILE})
ELSE(ITK_FOUND)
MESSAGE(FATAL_ERROR
"ITK not found. Please set ITK_DIR.")
ENDIF(ITK_FOUND)

set(PROJECTNAME "compress")
ADD_EXECUTABLE(${PROJECTNAME} compress.cpp)
TARGET_LINK_LIBRARIES(${PROJECTNAME} ${ITK_LIBRARIES} )


and the cmake command is:


cmake -G "Visual Studio 10 Win64"


The .vcproj file created has, in the Linker > Input > Additional Dependencies list not only what looks like all the ITK libraries (about 78) but also a whole lot of VTK libraries (about 35) and 3 Qt libraries. This is for a program that uses neither VTK nor Qt. I don't understand why all these libraries are included. I guess it doesn't really matter, since they don't finish up in the .exe, but it is a nuisance because for some reason the Qt libraries that it expects are a different version from those on the computer, which means I have to either delete those libraries from the list or change the version number. If I was having to do this just a couple of times it wouldn't be worth worrying about, but I am rebuilding on a new machine a large number of programs that all have this issue.


It would help to have a better understanding of the system that generates this list. Maybe there is a simple way to prevent unwanted libraries from getting into the list.

_____________________________________
Powered by www.kitware.com<http://www.kitware.com>

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/insight-users
Continue reading on narkive:
Loading...