Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

octovis library linking #392

Open
LukeXH opened this issue Mar 29, 2023 · 0 comments
Open

octovis library linking #392

LukeXH opened this issue Mar 29, 2023 · 0 comments

Comments

@LukeXH
Copy link

LukeXH commented Mar 29, 2023

When trying to leverage the octovis API, it's not enough to just put in your CMakeLists.txt:

find_package(octovis)
.
.
.
add_executable( <executable name> <src files...>)
target_include_directories(<executable name>  BEFORE PUBLIC ${OCTOVIS_INCLUDE_DIRS})
target_link_libraries(<executable name> ${OCTOVIS_LIBRARIES})

Because then cmake throws an error claiming it cannot find any of the associated Qt5 libraries

CMake Error at CMakeLists.txt:54 (add_executable):
  Target "CreateEOG" links to target "Qt5::Core" but the target was not
  found.  Perhaps a find_package() call is missing for an IMPORTED target, or
  an ALIAS target is missing?


CMake Error at CMakeLists.txt:54 (add_executable):
  Target "CreateEOG" links to target "Qt5::Gui" but the target was not found.
  Perhaps a find_package() call is missing for an IMPORTED target, or an
  ALIAS target is missing?


CMake Error at CMakeLists.txt:54 (add_executable):
  Target "CreateEOG" links to target "Qt5::OpenGL" but the target was not
  found.  Perhaps a find_package() call is missing for an IMPORTED target, or
  an ALIAS target is missing?


CMake Error at CMakeLists.txt:54 (add_executable):
  Target "CreateEOG" links to target "Qt5::Widgets" but the target was not
  found.  Perhaps a find_package() call is missing for an IMPORTED target, or
  an ALIAS target is missing?


CMake Error at CMakeLists.txt:54 (add_executable):
  Target "CreateEOG" links to target "Qt5::Xml" but the target was not found.
  Perhaps a find_package() call is missing for an IMPORTED target, or an
  ALIAS target is missing?

which results in a build error of:

/home/lhill/Apps/octomap/octovis/include/octovis/SceneObject.h:29:10: fatal error: qglobal.h: No such file or directory
   29 | #include <qglobal.h>
      |          ^~~~~~~~~~~
compilation terminated.

This issue can be fixed on an individual basis by adding the find_package() calls for each of the Qt5 packages above, resulting in:

find_package(octovis)
find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5OpenGL REQUIRED)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Xml REQUIRED)
.
.
.
add_executable( <executable name> <src files...>)
target_include_directories(<executable name>  BEFORE PUBLIC ${OCTOVIS_INCLUDE_DIRS})
target_link_libraries(<executable name> ${OCTOVIS_LIBRARIES})

A more general solution would be to add the find_package calls for Qt5 to the octovis package via something like editing the octovis-config.cmake.in to looks something like:

# It defines the following variables
#  OCTOVIS_INCLUDE_DIRS  - include directories for OctoMap viewer
#  OCTOVIS_LIBRARY_DIRS  - library directories for OctoMap viewer
#  OCTOVIS_LIBRARIES     - libraries to link against
#  OCTOVIS_MAJOR_VERSION - major version
#  OCTOVIS_MINOR_VERSION - minor version
#  OCTOVIS_PATCH_VERSION - patch version
#  OCTOVIS_VERSION       - major.minor.patch version

@PACKAGE_INIT@

set(OCTOVIS_MAJOR_VERSION "@OCTOVIS_MAJOR_VERSION@")
set(OCTOVIS_MINOR_VERSION "@OCTOVIS_MINOR_VERSION@")
set(OCTOVIS_PATCH_VERSION "@OCTOVIS_PATCH_VERSION@")
set(OCTOVIS_VERSION "@OCTOVIS_VERSION@")

find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5OpenGL REQUIRED)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Xml REQUIRED)

set_and_check(OCTOVIS_INCLUDE_DIRS "@PACKAGE_OCTOVIS_INCLUDE_DIRS@" "@QGLViewer_INCLUDE_DIR@")
set_and_check(OCTOVIS_LIBRARY_DIRS "@PACKAGE_OCTOVIS_LIB_DIR@" "@QGLViewer_LIBRARY_DIR@")

# Set library names as absolute paths:
set(OCTOVIS_LIBRARIES
  "@QGLViewer_LIBRARIES@"
  "@QT_LIBRARIES@"
  "@PACKAGE_OCTOVIS_LIB_DIR@/@OCTOVIS_LIBRARY@"
)

@OCTOVIS_INCLUDE_TARGETS@

Better solutions may exist.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants