Targets reported erroneously as "was not found".
Description
I'm getting error messages about missing targets despite them being found and successfully queried with get_target_properties()
. Are targets defined in projects *Config.cmake
file scoped somehow?
Excerpt from log:
-- Found GLEW: /usr/lib/libGLEW.so
...
GLEW::GLEW BINARY_DIR = /elmerfem-git/src/build/ElmerGUI
GLEW::GLEW IMPORTED = TRUE
GLEW::GLEW IMPORTED_IMPLIB = /usr/lib/libGLEW.so
GLEW::GLEW IMPORTED_LOCATION = /usr/lib/libGLEW.so
GLEW::GLEW INTERFACE_INCLUDE_DIRECTORIES = /usr/include
GLEW::GLEW LOCATION = /usr/lib/libGLEW.so
GLEW::GLEW LOCATION_Release = /usr/lib/libGLEW.so
GLEW::GLEW MACOSX_PACKAGE_LOCATION = /usr/lib/libGLEW.so
GLEW::GLEW NAME = GLEW::GLEW
GLEW::GLEW POSITION_INDEPENDENT_CODE = True
GLEW::GLEW SOURCE_DIR = /elmerfem-git/src/elmerfem/ElmerGUI
GLEW::GLEW TYPE = SHARED_LIBRARY
GLEW::GLEW VS_DEPLOYMENT_LOCATION = /usr/lib/libGLEW.s
...
CMake Error at ElmerGUI/Application/CMakeLists.txt:213 (ADD_EXECUTABLE):
Target "ElmerGUI" links to target "GLEW::GLEW" but the target was not
found. Perhaps a find_package() call is missing for an IMPORTED target, or
an ALIAS target is missing?
I'm having this weird issue with mmg/elmerfem
build against vtk:9.1
with cmake:3.21.4
It calls find_package(VTK)
twice with different components, once indirectly through find_pacakge(mmg)
witch in turns call find_package(VTK)
, and again directly in ElemrGUI
subdirectory.
Unifying the find_pacakage(VTK)
call in the mmgConfig.cmake
and the ElmerGUI/CMakeLists.txt
by including the offending component in both fix the issue.
Excerpt form the CMake config:
elmerfem/CMakeLists.txt
find_package(mmg)
elmerfem/fem/CMakeLists.txt
target_link_libraries(elmersolver Mmg::libmmg3d_so)
mmgConfig.cmake
find_package(VTK COMPONENTS IOParallel IOParallelXML)
mmgTargets.cmake
set_property(TARGET Mmg::libmmg3d_so APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(Mmg::libmmg3d_so PROPERTIES
IMPORTED_LINK_DEPENDENT_LIBRARIES_RELEASE "VTK::IOParallelXML;VTK::IOParallel"
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libmmg3d.so.5.6.0"
IMPORTED_SONAME_RELEASE "libmmg3d.so.5"
)
elmerfem/ElemrGUI/CMakeLists.txt
find_package(VTK REQUIRED ViewsQt FiltersExtraction FiltersModeling RenderingAnnotation RenderingFreeType)
elmerfem/ElmerGUI/Application/CMakeLists.txt
target_link_libraries(ElmerGUI ${VTK_LIBRARIES})
print_target_properties(GLEW::GLEW)
print_target_properties()
is a small function printing all defined properties for the target.
https://stackoverflow.com/a/56738858/3743145
cmake --trace-expand
Excerpt form /elmerfem-git/src/elmerfem/CMakeLists.txt(369): FIND_PACKAGE(mmg )
/usr/lib64/cmake/mmg/mmgConfig.cmake(33): find_package(VTK COMPONENTS IOParallel IOParallelXML )
/usr/lib64/cmake/vtk/VTK-targets.cmake(20): list(APPEND _expectedTargets VTK::glew )
/usr/lib64/cmake/vtk/VTK-targets.cmake(22): list(APPEND _targetsNotDefined VTK::glew )
/usr/lib64/cmake/vtk/VTK-targets.cmake(20): list(APPEND _expectedTargets VTK::RenderingOpenGL2 )
/usr/lib64/cmake/vtk/VTK-targets.cmake(22): list(APPEND _targetsNotDefined VTK::RenderingOpenGL2 )
/usr/lib64/cmake/vtk/VTK-targets.cmake(20): list(APPEND _expectedTargets VTK::GUISupportQt )
/usr/lib64/cmake/vtk/VTK-targets.cmake(22): list(APPEND _targetsNotDefined VTK::GUISupportQt )
/usr/lib64/cmake/vtk/VTK-targets.cmake(20): list(APPEND _expectedTargets VTK::ViewsQt )
/usr/lib64/cmake/vtk/VTK-targets.cmake(22): list(APPEND _targetsNotDefined VTK::ViewsQt )
/usr/lib64/cmake/vtk/VTK-targets.cmake(475): add_library(VTK::glew INTERFACE IMPORTED )
/usr/lib64/cmake/vtk/VTK-targets.cmake(477): set_target_properties(VTK::glew PROPERTIES INTERFACE_LINK_LIBRARIES GLEW::GLEW )
/usr/lib64/cmake/vtk/VTK-targets.cmake(482): add_library(VTK::RenderingOpenGL2 SHARED IMPORTED )
/usr/lib64/cmake/vtk/VTK-targets.cmake(484): set_target_properties(VTK::RenderingOpenGL2 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES /usr/include/vtk INTERFACE_LINK_LIBRARIES VTK::CommonCore;VTK::CommonDataModel;VTK::FiltersGeneral;VTK::RenderingCore;VTK::RenderingUI;VTK::glew;X11::X11 )
/usr/lib64/cmake/vtk/VTK-targets.cmake(699): add_library(VTK::GUISupportQt SHARED IMPORTED )
/usr/lib64/cmake/vtk/VTK-targets.cmake(701): set_target_properties(VTK::GUISupportQt PROPERTIES INTERFACE_INCLUDE_DIRECTORIES /usr/include/vtk INTERFACE_LINK_LIBRARIES VTK::CommonCore;VTK::RenderingCore;VTK::RenderingOpenGL2;VTK::InteractionWidgets;Qt5::OpenGL;Qt5::Widgets )
/usr/lib64/cmake/vtk/VTK-targets.cmake(778): add_library(VTK::ViewsQt SHARED IMPORTED )
/usr/lib64/cmake/vtk/VTK-targets.cmake(780): set_target_properties(VTK::ViewsQt PROPERTIES INTERFACE_INCLUDE_DIRECTORIES /usr/include/vtk INTERFACE_LINK_LIBRARIES VTK::CommonCore;VTK::GUISupportQt;VTK::ViewsCore;VTK::ViewsInfovis )
/usr/lib64/cmake/vtk/VTK-vtk-module-find-packages.cmake(96): if(ViewsQt IN_LIST _vtk_module_find_package_components )
/usr/lib64/cmake/vtk/VTK-vtk-module-find-packages.cmake(1665): if(GUISupportQt IN_LIST _vtk_module_find_package_components )
/usr/lib64/cmake/vtk/VTK-vtk-module-find-packages.cmake(1900): if(RenderingOpenGL2 IN_LIST _vtk_module_find_package_components )
/usr/lib64/cmake/vtk/VTK-vtk-module-find-packages.cmake(1947): if(glew IN_LIST _vtk_module_find_package_components )
/usr/lib64/cmake/mmg/MmgTargets.cmake(68): add_library(Mmg::libmmg3d_so SHARED IMPORTED )
/usr/lib64/cmake/mmg/MmgTargets-release.cmake(32): set_target_properties(Mmg::libmmg3d_so PROPERTIES IMPORTED_LINK_DEPENDENT_LIBRARIES_RELEASE VTK::IOParallelXML;VTK::IOParallel IMPORTED_LOCATION_RELEASE /usr/lib/libmmg3d.so.5.6.0 IMPORTED_SONAME_RELEASE libmmg3d.so.5 )
/elmerfem-git/src/elmerfem/fem/src/CMakeLists.txt(151): TARGET_LINK_LIBRARIES(elmersolver Mmg::libmmg3d_so )
/elmerfem-git/src/elmerfem/ElmerGUI/CMakeLists.txt(98): FIND_PACKAGE(VTK REQUIRED ViewsQt FiltersExtraction FiltersModeling RenderingAnnotation RenderingFreeType )
/usr/lib64/cmake/vtk/VTK-targets.cmake(25): list(APPEND _targetsDefined VTK::glew )
/usr/lib64/cmake/vtk/VTK-targets.cmake(25): list(APPEND _targetsDefined VTK::RenderingOpenGL2 )
/usr/lib64/cmake/vtk/VTK-targets.cmake(25): list(APPEND _targetsDefined VTK::GUISupportQt )
/usr/lib64/cmake/vtk/VTK-targets.cmake(25): list(APPEND _targetsDefined VTK::ViewsQt )
/usr/lib64/cmake/vtk/VTK-vtk-module-find-packages.cmake(1947): if(glew IN_LIST _vtk_module_find_package_components )
/usr/lib64/cmake/vtk/VTK-vtk-module-find-packages.cmake(1966): find_package(GLEW COMPONENTS OPTIONAL_COMPONENTS )
/usr/lib64/cmake/vtk/FindGLEW.cmake(21): add_library(GLEW::GLEW SHARED IMPORTED )
/usr/lib64/cmake/vtk/FindGLEW.cmake(23): set_target_properties(GLEW::GLEW PROPERTIES IMPORTED_LOCATION /usr/lib/libGLEW.so IMPORTED_IMPLIB /usr/lib/libGLEW.so INTERFACE_INCLUDE_DIRECTORIES /usr/include )
/elmerfem-git/src/elmerfem/ElmerGUI/Application/CMakeLists.txt(246): TARGET_LINK_LIBRARIES(ElmerGUI VTK::ViewsQt;VTK::FiltersExtraction;VTK::FiltersModeling;VTK::RenderingAnnotation;VTK::RenderingFreeType )
-- Configuring done
CMake Error at ElmerGUI/Application/CMakeLists.txt:213 (ADD_EXECUTABLE):
Target "ElmerGUI" links to target "GLEW::GLEW" but the target was not
found. Perhaps a find_package() call is missing for an IMPORTED target, or
an ALIAS target is missing?