When using internal ITK, OTBConfig.cmake does not reference ITK include directories (OTB trunk 4.0)
Mantis Issue 837, reported by jmichel, assigned to jmichel, created: 2013-11-21
When trying to compile Monteverdi with an installed OTB, the following error occurs:
In file included from /home/jmichel/Projets/src/Monteverdi/Code/Common/otbColorBarWidget.cxx:18:0: /home/jmichel/Projets/src/Monteverdi/Code/Common/otbColorBarWidget.h:22:23: erreur fatale: itkObject.h : Aucun fichier ou dossier de ce type compilation terminée. make[2]: *** [Code/Common/CMakeFiles/OTBMonteverdiCommon.dir/otbColorBarWidget.cxx.o] Erreur 1 make[1]: *** [Code/Common/CMakeFiles/OTBMonteverdiCommon.dir/all] Erreur 2 make: *** [all] Erreur 2
Which means ITK headers are not found.
In local/lib/otb/OTBConfig.cmake, it seems that despite the USE_EXTERNAL_ITK option set to FALSE, ITK headers are not referenced in the OTB_INCLUDE_DIRECTORIES variable:
The OTB include file directories.
set(OTB_INCLUDE_DIRS "{OTB_INSTALL_PREFIX}/include/otb;
{OTB_INSTALL_PREFIX}/include/otb/Common;{OTB_INSTALL_PREFIX}/include/otb/BasicFilters;
{OTB_INSTALL_PREFIX}/include/otb/IO;{OTB_INSTALL_PREFIX}/include/otb/ChangeDetection;
{OTB_INSTALL_PREFIX}/include/otb/FeatureExtraction;{OTB_INSTALL_PREFIX}/include/otb/Learning;
{OTB_INSTALL_PREFIX}/include/otb/MultiScale;{OTB_INSTALL_PREFIX}/include/otb/MultiTemporal;
{OTB_INSTALL_PREFIX}/include/otb/SpatialReasoning;{OTB_INSTALL_PREFIX}/include/otb/DisparityMap;
{OTB_INSTALL_PREFIX}/include/otb/Visu;{OTB_INSTALL_PREFIX}/include/otb/Visualization;
{OTB_INSTALL_PREFIX}/include/otb/Gui;{OTB_INSTALL_PREFIX}/include/otb/Projections;
{OTB_INSTALL_PREFIX}/include/otb/Radiometry;{OTB_INSTALL_PREFIX}/include/otb/SARPolarimetry;
{OTB_INSTALL_PREFIX}/include/otb/Segmentation;{OTB_INSTALL_PREFIX}/include/otb/Markov;
{OTB_INSTALL_PREFIX}/include/otb/Fusion;{OTB_INSTALL_PREFIX}/include/otb/GeospatialAnalysis;
{OTB_INSTALL_PREFIX}/include/otb/Hyperspectral;{OTB_INSTALL_PREFIX}/include/otb/Simulation;
{OTB_INSTALL_PREFIX}/include/otb/Testing;{OTB_INSTALL_PREFIX}/include/otb/UtilitiesAdapters/CurlAdapters;
{OTB_INSTALL_PREFIX}/include/otb/UtilitiesAdapters/OssimAdapters;{OTB_INSTALL_PREFIX}/include/otb/UtilitiesAdapters/TinyXMLAdapters;
{OTB_INSTALL_PREFIX}/include/otb/UtilitiesAdapters/OGRAdapters;{OTB_INSTALL_PREFIX}/include/otb/UtilitiesAdapters/OpenCVAdapters;
{OTB_INSTALL_PREFIX}/include/otb/UtilitiesAdapters/ITKPendingPatches;{OTB_INSTALL_PREFIX}/include/otb/UtilitiesAdapters;
{OTB_INSTALL_PREFIX}/include/otb/OBIA;{OTB_INSTALL_PREFIX}/include/otb/Fuzzy;
{OTB_INSTALL_PREFIX}/include/otb/ObjectDetection;{OTB_INSTALL_PREFIX}/include/otb/ApplicationEngine;
{OTB_INSTALL_PREFIX}/include/otb/Utilities;{OTB_INSTALL_PREFIX}/include/otb/Utilities/otbsvm;
{OTB_INSTALL_PREFIX}/include/otb/Utilities/InsightJournal;{OTB_INSTALL_PREFIX}/include/otb/Utilities/otb6S;
{OTB_INSTALL_PREFIX}/include/otb/Utilities/otbedison;{OTB_INSTALL_PREFIX}/include/otb/Utilities/otbconfigfile;
{OTB_INSTALL_PREFIX}/include/otb/UtilitiesAdapters/OpenCVAdapters;{OTB_INSTALL_PREFIX}/include/otb/Wrappers;
{OTB_INSTALL_PREFIX}/include/otb/Wrappers/QtWidget;{OTB_INSTALL_PREFIX}/include/otb/Utilities/BGL;
{OTB_INSTALL_PREFIX}/include/otb/Utilities/otbsiftfast;{OTB_INSTALL_PREFIX}/include/otb/Utilities/otbliblas/include;
{OTB_INSTALL_PREFIX}/include/otb/Utilities/tinyXMLlib;{OTB_INSTALL_PREFIX}/include/otb/Utilities/otbmuparser;
{OTB_INSTALL_PREFIX}/include/otb/Utilities/otbkml;/usr/include/gdal;/usr/include;/usr/include/gdal;/usr/include;/usr/include;/usr/include/opencv;/usr/include")
The only entry containing "ITK" is ${OTB_INSTALL_PREFIX}/include/otb/UtilitiesAdapters/ITKPendingPatches
1385127081 - julienFixed here: http://hg.orfeo-toolbox.org/OTB/rev/ad1007009255
Though I would like to be sure that adding only Utilities/ITK to include directories in install tree is enough. There is a bunch of subdirectories in installed Utilities/ITK (such as vcl & co). Should they be listed in include directories as well ?
1385127894 - julienmYes they should
1385128094 - julienmIt should be fixed only in UseOTB.cmake.in
The section : if(OTB_USE_EXTERNAL_ITK) find_package(ITK REQUIRED) include(${ITK_USE_FILE}) endif()
should have a else() where we also do a find_package(ITK REQUIRED) but enforcing the paths where to search for it.
1385128306 - julienAre you sure ? It seems to me that we do not install any UseITK.cmake file when building and installing with internal ITK ...
1385128468 - julienmYou don't have a "lib/cmake/ITK-4.4" dir under your install prefix ?
1385128522 - julienok I do, sorry.
1385129926 - julienNew attempt here: http://hg.orfeo-toolbox