Skip to content

Instantly share code, notes, and snippets.

@suzp1984
Created May 30, 2020 09:44
Show Gist options
  • Save suzp1984/68b7152d5b7050f9bac2d843c252adfa to your computer and use it in GitHub Desktop.
Save suzp1984/68b7152d5b7050f9bac2d843c252adfa to your computer and use it in GitHub Desktop.
cmake find package module
# use pkg-config system
find_package(PkgConfig QUIET)
# FIND_GLIB_COMPONENT macro
macro(FIND_GLIB_COMPONENT _component_prefix _pkgconfig_name _library)
pkg_check_modules(PC_${_component_prefix} ${_pkgconfig_name})
set(${_component_prefix}_INCLUDE_DIRS ${PC_${_component_prefix}_INCLUDE_DIRS})
find_library(${_component_prefix}_LIBRARIES
NAMES ${_library}
HINTS ${PC_${_component_prefix}_LIBRARY_DIRS} ${PC_${_component_prefix}_LIBDIR}
)
endmacro()
# Find all the libraries of GLIB-2.0
FIND_GLIB_COMPONENT(GLIB glib-2.0 glib-2.0)
FIND_GLIB_COMPONENT(GIO gio-2.0 gio-2.0)
FIND_GLIB_COMPONENT(GIO_UNIX gio-unix-2.0 gio-unix-2.0)
FIND_GLIB_COMPONENT(GMODULE gmodule-2.0 gmodule-2.0)
FIND_GLIB_COMPONENT(GMODULE_EXPORT gmodule-export-2.0 gmodule-export-2.0)
FIND_GLIB_COMPONENT(GMODULE_NO_EXPORT gmodule-no-export-2.0 gmodule-no-export-2.0)
FIND_GLIB_COMPONENT(GOBJECT gobject-2.0 gobject-2.0)
FIND_GLIB_COMPONENT(GTHREAD gthread-2.0 gthread-2.0)
FIND_GLIB_COMPONENT(GTHREAD gthreadhh-2.0 gthreadhh-2.0)
set(_GLIB_REQUIRED_VARS
GLIB_INCLUDE_DIRS
GLIB_LIBRARIES
GLIB_VERSION
GIO_INCLUDE_DIRS
GIO_LIBRARIES
GMODULE_INCLUDE_DIRS
GMODULE_LIBRARIES
GOBJECT_INCLUDE_DIRS
GOBJECT_LIBRARIES
GTHREAD_INCLUDE_DIRS
GTHREAD_LIBRARIES)
foreach (_component ${GLIB_FIND_COMPONENTS})
set(_glib_component "GLIB_${_component}")
string(TOUPPER ${_glib_component} _UPPER_NAME)
list(APPEND _GLIB_REQUIRED_VARS ${_UPPER_NAME}_INCLUDE_DIRS ${_UPPER_NAME}_LIBRARIES)
endforeach ()
# setup GLib_FOUND variable
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLib REQUIRED_VARS _GLIB_REQUIRED_VARS
VERSION_VAR GLIB_VERSION)
# may used to setup some GUI configuration tools
mark_as_advanced(
GLIB_INCLUDE_DIRS
GLIB_LIBRARIES
GIO_INCLUDE_DIRS
GIO_LIBRARIES
GIO_UNIX_INCLUDE_DIRS
GIO_UNIX_LIBRARIES
GMODULE_INCLUDE_DIRS
GMODULE_LIBRARIES
GMODULE_EXPORT_INCLUDE_DIRS
GMODULE_EXPORT_LIBRARIES
GMODULE_NO_EXPORT_INCLUDE_DIRS
GMODULE_NO_EXPORT_LIBRARIES
GOBJECT_INCLUDE_DIRS
GOBJECT_LIBRARIES
GTHREAD_INCLUDE_DIRS
GTHREAD_LIBRARIES
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment