1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
|
# - try to find MyPackage library
#
# Example-FindMyPackage-UsingImportedTargets.cmake
#
# This module does the same thing as Example-FindMyPackage.cmake
# except that rather than passing along full path names for libraries,
# it creates imported targets. The end result is roughly the same to
# the end-user. Please see that other file for the full documentation
# of the example.
#
# Note that if you're going to be installing target export files, this
# is probably what you should prefer. See cmake mailing list archives.
#
# Start of what would be a minimal module documentation block:
#
# Cache Variables: (not for direct use in CMakeLists.txt)
# MYPACKAGE_ROOT
# MYPACKAGE_LIBRARY
# MYPACKAGE_INCLUDE_DIR
# MYPACKAGE_a_LIBRARY
# MYPACKAGE_a_INCLUDE_DIR
# MYPACKAGE_b_LIBRARY
# MYPACKAGE_b_INCLUDE_DIR
# MYPACKAGE_c_LIBRARY
# MYPACKAGE_c_INCLUDE_DIR
#
# Non-cache variables you might use in your CMakeLists.txt:
# MYPACKAGE_FOUND
#
# MYPACKAGE_LIBRARIES
# MYPACKAGE_INCLUDE_DIRS
# MYPACKAGE_LINKER_FLAGS
#
# MYPACKAGE_a_LIBRARIES
# MYPACKAGE_a_INCLUDE_DIRS
# MYPACKAGE_a_LINKER_FLAGS
#
# MYPACKAGE_b_LIBRARIES
# MYPACKAGE_b_INCLUDE_DIRS
# MYPACKAGE_b_LINKER_FLAGS
#
# MYPACKAGE_c_LIBRARIES
# MYPACKAGE_c_INCLUDE_DIRS
# MYPACKAGE_c_LINKER_FLAGS
#
# Use this module this way:
# find_package(MyPackage)
# include_directories(${MYPACKAGE_INCLUDE_DIRS})
# add_executable(myapp ${SOURCES})
# target_link_libraries(myapp ${MYPACKAGE_LIBRARIES})
# set_property(TARGET myapp PROPERTY LINK_FLAGS ${MYPACKAGE_LINKER_FLAGS})
#
# Requires these CMake modules:
# FindPackageHandleStandardArgs (CMake standard module)
#
# Original Author:
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
set(MYPACKAGE_ROOT
"${MYPACKAGE_ROOT}"
CACHE
PATH
"Root directory to look in")
find_library(MYPACKAGE_LIBRARY
NAMES
mypackagecore
PATHS
"${MYPACKAGE_ROOT}"
PATH_SUFFIXES
lib)
find_path(MYPACKAGE_INCLUDE_DIR
NAMES
mypackage/mypackage.h
PATHS
"${MYPACKAGE_ROOT}"
PATH_SUFFIXES
include)
# Assuming that the components are named libmypackagea, libmypackageb, etc
foreach(lib a b c)
find_library(MYPACKAGE_${lib}_LIBRARY
NAMES
mypackage${lib}
PATHS
"${MYPACKAGE_ROOT}"
PATH_SUFFIXES
lib)
find_path(MYPACKAGE_${lib}_INCLUDE_DIR
NAMES
mypackage/${lib}/${lib}.h
PATHS
"${MYPACKAGE_ROOT}"
PATH_SUFFIXES
include)
endforeach()
# see /usr/share/cmake-2.x/Modules/FindBLAS.cmake for the variables this will define
if(NOT BLAS_FOUND)
find_package(BLAS QUIETLY)
endif()
# handle the QUIETLY and REQUIRED arguments and set xxx_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(MyPackage
DEFAULT_MSG
MYPACKAGE_LIBRARY
MYPACKAGE_INCLUDE_DIR
MYPACKAGE_a_LIBRARY
MYPACKAGE_a_INCLUDE_DIR
MYPACKAGE_b_LIBRARY
MYPACKAGE_b_INCLUDE_DIR
MYPACKAGE_c_LIBRARY
MYPACKAGE_c_INCLUDE_DIR
BLAS_FOUND)
if(MYPACKAGE_FOUND)
# Set variables containing libraries and their dependencies
# Always use the plural form for the variables defined by other find modules:
# they might have dependencies too!
add_library(mypackage_c IMPORTED)
set_target_properties(mypackage_c
PROPERTIES
IMPORTED_LOCATION
${MYPACKAGE_c_LIBRARY}
IMPORTED_LINK_INTERFACE_LIBRARIES
${BLAS_LIBRARIES})
set(MYPACKAGE_c_LIBRARIES mypackage_c)
set(MYPACKAGE_c_INCLUDE_DIRS ${MYPACKAGE_c_INCLUDE_DIR}) # No include dir for BLAS?
set(MYPACKAGE_c_LINKER_FLAGS ${BLAS_LINKER_FLAGS})
add_library(mypackage_b IMPORTED)
set_target_properties(mypackage_b
PROPERTIES
IMPORTED_LOCATION
${MYPACKAGE_b_LIBRARY}
IMPORTED_LINK_INTERFACE_LIBRARIES
${MYPACKAGE_c_LIBRARIES})
set(MYPACKAGE_b_LIBRARIES mypackage_b)
set(MYPACKAGE_b_INCLUDE_DIRS
${MYPACKAGE_b_INCLUDE_DIR}
${MYPACKAGE_c_INCLUDE_DIRS})
set(MYPACKAGE_b_LINKER_FLAGS ${MYPACKAGE_c_LINKER_FLAGS})
add_library(mypackage_a IMPORTED)
set_target_properties(mypackage_a
PROPERTIES
IMPORTED_LOCATION
${MYPACKAGE_a_LIBRARY}
IMPORTED_LINK_INTERFACE_LIBRARIES
${MYPACKAGE_b_LIBRARIES})
set(MYPACKAGE_a_LIBRARIES mypackage_a)
set(MYPACKAGE_a_INCLUDE_DIRS
${MYPACKAGE_a_INCLUDE_DIR}
${MYPACKAGE_b_INCLUDE_DIRS})
set(MYPACKAGE_a_LINKER_FLAGS ${MYPACKAGE_b_LINKER_FLAGS})
add_library(mypackage_core IMPORTED)
set_target_properties(mypackage_core
PROPERTIES
IMPORTED_LOCATION
${MYPACKAGE_LIBRARY}
IMPORTED_LINK_INTERFACE_LIBRARIES
${MYPACKAGE_a_LIBRARIES})
set(MYPACKAGE_LIBRARIES mypackage_core)
set(MYPACKAGE_INCLUDE_DIRS
${MYPACKAGE_INCLUDE_DIR}
${MYPACKAGE_a_INCLUDE_DIRS})
set(MYPACKAGE_LINKER_FLAGS ${MYPACKAGE_a_LINKER_FLAGS})
endif()
mark_as_advanced(MYPACKAGE_LIBRARY
MYPACKAGE_INCLUDE_DIR
MYPACKAGE_a_LIBRARY
MYPACKAGE_a_INCLUDE_DIR
MYPACKAGE_b_LIBRARY
MYPACKAGE_b_INCLUDE_DIR
MYPACKAGE_c_LIBRARY
MYPACKAGE_c_INCLUDE_DIR)
if(MYPACKAGE_FOUND)
mark_as_advanced(MYPACKAGE_ROOT)
endif()
# End of Example-FindMyPackage-UsingImportedTargets.cmake
|