Skip to content

Commit

Permalink
Merge pull request #2861 from SunBlack/flann_imported_target
Browse files Browse the repository at this point in the history
Implement imported target for FLANN
  • Loading branch information
SergioRAgostinho authored Mar 5, 2019
2 parents cf95a95 + 7c9d8c5 commit 485033d
Show file tree
Hide file tree
Showing 8 changed files with 136 additions and 120 deletions.
2 changes: 0 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -289,8 +289,6 @@ if(NOT PCL_SHARED_LIBS OR ((WIN32 AND NOT MINGW) AND NOT PCL_BUILD_WITH_FLANN_DY
set(FLANN_USE_STATIC ON)
endif()
find_package(FLANN 1.7.0 REQUIRED)
include_directories(SYSTEM ${FLANN_INCLUDE_DIRS})
link_directories(${FLANN_LIBRARY_DIRS})

# libusb-1.0
option(WITH_LIBUSB "Build USB RGBD-Camera drivers" TRUE)
Expand Down
5 changes: 4 additions & 1 deletion PCLConfig.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -645,7 +645,10 @@ endif()
pcl_remove_duplicate_libraries(PCL_COMPONENTS PCL_LIBRARIES)

# Add 3rd party libraries, as user code might include our .HPP implementations
list(APPEND PCL_LIBRARIES ${BOOST_LIBRARIES} ${QHULL_LIBRARIES} ${OPENNI_LIBRARIES} ${OPENNI2_LIBRARIES} ${ENSENSO_LIBRARIES} ${davidSDK_LIBRARIES} ${DSSDK_LIBRARIES} ${RSSDK_LIBRARIES} ${FLANN_LIBRARIES} ${VTK_LIBRARIES})
list(APPEND PCL_LIBRARIES ${BOOST_LIBRARIES} ${QHULL_LIBRARIES} ${OPENNI_LIBRARIES} ${OPENNI2_LIBRARIES} ${ENSENSO_LIBRARIES} ${davidSDK_LIBRARIES} ${DSSDK_LIBRARIES} ${RSSDK_LIBRARIES} ${VTK_LIBRARIES})
if (TARGET FLANN::FLANN)
list(APPEND PCL_LIBRARIES FLANN::FLANN)
endif()

find_package_handle_standard_args(PCL DEFAULT_MSG PCL_LIBRARIES PCL_INCLUDE_DIRS)
mark_as_advanced(PCL_LIBRARIES PCL_INCLUDE_DIRS PCL_LIBRARY_DIRS)
Expand Down
172 changes: 127 additions & 45 deletions cmake/Modules/FindFLANN.cmake
Original file line number Diff line number Diff line change
@@ -1,63 +1,145 @@
###############################################################################
# Find FLANN
#.rst:
# FindFLANN
# --------
#
# This sets the following variables:
# FLANN_FOUND - True if FLANN was found.
# FLANN_INCLUDE_DIRS - Directories containing the FLANN include files.
# FLANN_LIBRARIES - Libraries needed to use FLANN.
# FLANN_DEFINITIONS - Compiler flags for FLANN.
# If FLANN_USE_STATIC is specified and then look for static libraries ONLY else
# look for shared ones
# Try to find FLANN library and include files.
#
# IMPORTED Targets
# ^^^^^^^^^^^^^^^^
#
# This module defines the :prop_tgt:`IMPORTED` targets:
#
# ``FLANN::FLANN``
# Defined if the system has FLANN.
#
# Result Variables
# ^^^^^^^^^^^^^^^^
#
# This module sets the following variables:
#
# ::
#
# FLANN_FOUND True in case FLANN is found, otherwise false
# FLANN_DEFINITIONS Compiler flags for FLANN.
# FLANN_INCLUDE_DIR Location of FLANN header files
# FLANN_INCLUDE_DIRS Location of FLANN header files (including dependencies)
# FLANN_LIBRARY FLANN release library
# FLANN_LIBRARY_DEBUG FLANN debug library
# FLANN_LIBRARIES FLANN release and debug library
#
# Example usage
# ^^^^^^^^^^^^^
#
# ::
#
# find_package(FLANN REQUIRED)
#
# add_executable(foo foo.cc)
# target_link_libraries(foo FLANN::FLANN)
#

find_package(PkgConfig QUIET)
if(FLANN_FIND_VERSION)
pkg_check_modules(PC_FLANN flann>=${FLANN_FIND_VERSION})
else()
pkg_check_modules(PC_FLANN flann)
endif()

set(FLANN_DEFINITIONS ${PC_FLANN_CFLAGS_OTHER})

if(FLANN_USE_STATIC)
set(FLANN_RELEASE_NAME flann_cpp_s)
set(FLANN_DEBUG_NAME flann_cpp_s-gd)
set(FLANN_DEFINITIONS ${FLANN_DEFINITIONS} "-DFLANN_STATIC")
else()
set(FLANN_RELEASE_NAME flann_cpp)
set(FLANN_DEBUG_NAME flann_cpp-gd)
endif()

find_package(PkgConfig QUIET)
if(FLANN_FIND_VERSION)
pkg_check_modules(FLANN flann>=${FLANN_FIND_VERSION})
else()
pkg_check_modules(FLANN flann)
endif()
find_path(FLANN_INCLUDE_DIR
NAMES
flann/flann.hpp
HINTS
${PC_FLANN_INCLUDE_DIRS}
${FLANN_ROOT}
$ENV{FLANN_ROOT}
PATHS
$ENV{PROGRAMFILES}/Flann
$ENV{PROGRAMW6432}/Flann
PATH_SUFFIXES
include
)

if(NOT FLANN_FOUND)
find_path(FLANN_INCLUDE_DIR flann/flann.hpp
HINTS "${FLANN_ROOT}" "$ENV{FLANN_ROOT}"
PATHS "$ENV{PROGRAMFILES}/flann" "$ENV{PROGRAMW6432}/flann"
PATH_SUFFIXES include)

find_library(FLANN_LIBRARY
NAMES ${FLANN_RELEASE_NAME}
HINTS "${FLANN_ROOT}" "$ENV{FLANN_ROOT}"
PATHS "$ENV{PROGRAMFILES}/flann" "$ENV{PROGRAMW6432}/flann"
PATH_SUFFIXES lib)

find_library(FLANN_LIBRARY_DEBUG
NAMES ${FLANN_DEBUG_NAME} ${FLANN_RELEASE_NAME}
HINTS "${FLANN_ROOT}" "$ENV{FLANN_ROOT}"
PATHS "$ENV{PROGRAMFILES}/flann" "$ENV{PROGRAMW6432}/flann"
PATH_SUFFIXES lib debug/lib)

if(NOT FLANN_LIBRARY_DEBUG)
set(FLANN_LIBRARY_DEBUG ${FLANN_LIBRARY})
endif()
find_library(FLANN_LIBRARY
NAMES
${FLANN_RELEASE_NAME}
HINTS
${PC_FLANN_LIBRARY_DIRS}
${FLANN_ROOT}
$ENV{FLANN_ROOT}
PATHS
$ENV{PROGRAMFILES}/Flann
$ENV{PROGRAMW6432}/Flann
PATH_SUFFIXES
lib
)

set(FLANN_INCLUDE_DIRS ${FLANN_INCLUDE_DIR})
set(FLANN_LIBRARIES optimized ${FLANN_LIBRARY} debug ${FLANN_LIBRARY_DEBUG})
find_library(FLANN_LIBRARY_DEBUG
NAMES
${FLANN_DEBUG_NAME}
HINTS
${PC_FLANN_LIBRARY_DIRS}
${FLANN_ROOT}
$ENV{FLANN_ROOT}
PATHS
$ENV{PROGRAMFILES}/Flann
$ENV{PROGRAMW6432}/Flann
PATH_SUFFIXES
lib
)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(FLANN DEFAULT_MSG FLANN_LIBRARY FLANN_INCLUDE_DIR)

mark_as_advanced(FLANN_LIBRARY FLANN_LIBRARY_DEBUG FLANN_INCLUDE_DIR)
if(FLANN_LIBRARY AND FLANN_LIBRARY_DEBUG)
set(FLANN_LIBRARIES optimized ${FLANN_LIBRARY} debug ${FLANN_LIBRARY_DEBUG})
else()
set(FLANN_LIBRARIES ${FLANN_LIBRARY})
endif()

set(FLANN_INCLUDE_DIRS
${FLANN_INCLUDE_DIR}
)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
FLANN DEFAULT_MSG
FLANN_LIBRARIES FLANN_INCLUDE_DIR
)

if(FLANN_FOUND)
message(STATUS "FLANN found (include: ${FLANN_INCLUDE_DIRS}, lib: ${FLANN_LIBRARIES})")
if(FLANN_USE_STATIC)
add_definitions(-DFLANN_STATIC)
if(NOT TARGET FLANN::FLANN)
if (FLANN_USE_STATIC)
add_library(FLANN::FLANN STATIC IMPORTED)
else()
add_library(FLANN::FLANN SHARED IMPORTED)
endif()
set_target_properties(FLANN::FLANN PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FLANN_INCLUDE_DIRS}")
set_target_properties(FLANN::FLANN PROPERTIES INTERFACE_COMPILE_DEFINITIONS "${FLANN_DEFINITIONS}")
if(FLANN_LIBRARY)
set_property(TARGET FLANN::FLANN APPEND PROPERTY IMPORTED_CONFIGURATIONS "RELEASE")
set_target_properties(FLANN::FLANN PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX")
if(WIN32)
set_target_properties(FLANN::FLANN PROPERTIES IMPORTED_IMPLIB_RELEASE "${FLANN_LIBRARY}")
else()
set_target_properties(FLANN::FLANN PROPERTIES IMPORTED_LOCATION_RELEASE "${FLANN_LIBRARY}")
endif()
endif()
if(FLANN_LIBRARY_DEBUG)
set_property(TARGET FLANN::FLANN APPEND PROPERTY IMPORTED_CONFIGURATIONS "DEBUG")
set_target_properties(FLANN::FLANN PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX")
if(WIN32)
set_target_properties(FLANN::FLANN PROPERTIES IMPORTED_IMPLIB_DEBUG "${FLANN_LIBRARY_DEBUG}")
else()
set_target_properties(FLANN::FLANN PROPERTIES IMPORTED_LOCATION_DEBUG "${FLANN_LIBRARY_DEBUG}")
endif()
endif()
endif()
endif()
8 changes: 2 additions & 6 deletions doc/tutorials/content/sources/vfh_recognition/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)

# we need FindFLANN.cmake
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})

project(vfh_cluster_classifier)

find_package(PCL 1.2 REQUIRED)
Expand All @@ -14,13 +11,12 @@ find_package(HDF5 REQUIRED)
find_package(FLANN REQUIRED)

include_directories(SYSTEM
${FLANN_INCLUDE_DIRS}
${HDF5_INCLUDE_DIR}
)

add_executable(build_tree build_tree.cpp)
target_link_libraries(build_tree ${PCL_LIBRARIES} ${Boost_LIBRARIES}
${FLANN_LIBRARIES} ${HDF5_hdf5_LIBRARY})
FLANN::FLANN ${HDF5_hdf5_LIBRARY})

add_executable(nearest_neighbors nearest_neighbors.cpp)
target_link_libraries(nearest_neighbors ${PCL_LIBRARIES} ${Boost_LIBRARIES} ${FLANN_LIBRARIES} ${HDF5_hdf5_LIBRARY})
target_link_libraries(nearest_neighbors ${PCL_LIBRARIES} ${Boost_LIBRARIES} FLANN::FLANN ${HDF5_hdf5_LIBRARY})
63 changes: 0 additions & 63 deletions doc/tutorials/content/sources/vfh_recognition/FindFLANN.cmake

This file was deleted.

2 changes: 1 addition & 1 deletion kdtree/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ set(impl_incs
set(LIB_NAME "pcl_${SUBSYS_NAME}")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include")
PCL_ADD_LIBRARY("${LIB_NAME}" "${SUBSYS_NAME}" ${srcs} ${incs} ${impl_incs})
target_link_libraries("${LIB_NAME}" pcl_common ${FLANN_LIBRARIES})
target_link_libraries("${LIB_NAME}" pcl_common FLANN::FLANN)
set(EXT_DEPS flann)
PCL_MAKE_PKGCONFIG("${LIB_NAME}" "${SUBSYS_NAME}" "${SUBSYS_DESC}" "${SUBSYS_DEPS}" "${EXT_DEPS}" "" "" "")

Expand Down
2 changes: 1 addition & 1 deletion search/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ set(impl_incs
set(LIB_NAME "pcl_${SUBSYS_NAME}")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include")
PCL_ADD_LIBRARY("${LIB_NAME}" "${SUBSYS_NAME}" ${srcs} ${incs} ${impl_incs})
target_link_libraries("${LIB_NAME}" pcl_common ${FLANN_LIBRARIES} pcl_octree pcl_kdtree)
target_link_libraries("${LIB_NAME}" pcl_common FLANN::FLANN pcl_octree pcl_kdtree)
list(APPEND EXT_DEPS flann)
PCL_MAKE_PKGCONFIG("${LIB_NAME}" "${SUBSYS_NAME}" "${SUBSYS_DESC}" "${SUBSYS_DEPS}" "" "" "" "")

Expand Down
2 changes: 1 addition & 1 deletion test/features/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ if(BUILD_io)
ARGUMENTS "${PCL_SOURCE_DIR}/test/bun0.pcd")
PCL_ADD_TEST(features_narf test_narf
FILES test_narf.cpp
LINK_WITH pcl_gtest pcl_features ${FLANN_LIBRARIES})
LINK_WITH pcl_gtest pcl_features FLANN::FLANN)
PCL_ADD_TEST(a_ii_normals_test test_ii_normals
FILES test_ii_normals.cpp
LINK_WITH pcl_gtest pcl_io pcl_features
Expand Down

0 comments on commit 485033d

Please sign in to comment.