diff --git a/2d/CMakeLists.txt b/2d/CMakeLists.txt index e706ca4e7a6..f90465f7717 100644 --- a/2d/CMakeLists.txt +++ b/2d/CMakeLists.txt @@ -32,6 +32,9 @@ set(impl_incs include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include") set(LIB_NAME "pcl_${SUBSYS_NAME}") + +PCL_ADD_LIBRARY(${LIB_NAME} COMPONENT ${SUBSYS_NAME}) + PCL_MAKE_PKGCONFIG(${LIB_NAME} COMPONENT ${SUBSYS_NAME} DESC ${SUBSYS_DESC} PCL_DEPS ${SUBSYS_DEPS} HEADER_ONLY) #Install include files diff --git a/CMakeLists.txt b/CMakeLists.txt index cee13e6a8e6..7db2c294106 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -246,6 +246,7 @@ if(WIN32) set(PCL_POINTCLOUDS_DIR "${PCL_RESOURCES_DIR}/pointclouds") endif() +#Set up output directory for builds set(PCL_OUTPUT_LIB_DIR "${PCL_BINARY_DIR}/${LIB_INSTALL_DIR}") set(PCL_OUTPUT_BIN_DIR "${PCL_BINARY_DIR}/${BIN_INSTALL_DIR}") make_directory("${PCL_OUTPUT_LIB_DIR}") @@ -274,6 +275,7 @@ if(CMAKE_GENERATOR_IS_IDE) else() set(UNINSTALL_TARGET_NAME uninstall) endif() + configure_file("${PCL_SOURCE_DIR}/cmake/uninstall_target.cmake.in" "${PCL_BINARY_DIR}/uninstall_target.cmake" IMMEDIATE @ONLY) add_custom_target(${UNINSTALL_TARGET_NAME} "${CMAKE_COMMAND}" -P diff --git a/PCLConfig.cmake.in b/PCLConfig.cmake.in index 98f9bcef95c..e7e7c277269 100644 --- a/PCLConfig.cmake.in +++ b/PCLConfig.cmake.in @@ -12,17 +12,13 @@ # www.pointclouds.org #------------------------------------------------------------------------------------ -# Set default policy behavior similar to minimum requirement version -cmake_policy(VERSION 3.10) - -# explicitly set policies we already support in newer cmake versions -if(POLICY CMP0074) - # TODO: update *_ROOT variables to be PCL_*_ROOT or equivalent. - # CMP0074 directly affects how Find* modules work and *_ROOT variables. Since - # this is a config file that will be consumed by parent projects with (likely) - # NEW behavior, we need to push a policy stack. - cmake_policy(SET CMP0074 NEW) -endif() +include(CMakeFindDependencyMacro) + +set(PCL_VERSION @CMAKE_PROJECT_VERSION@) + +@PACKAGE_INIT@ + +set_and_check(PCL_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/Modules") @@ -48,44 +44,6 @@ macro(pcl_message) endif() endmacro() -# Remove duplicate libraries -macro(pcl_remove_duplicate_libraries _unfiltered_libraries _filtered_libraries) - set(${_filtered_libraries}) - set(_debug_libraries) - set(_optimized_libraries) - set(_other_libraries) - set(_waiting_for_debug 0) - set(_waiting_for_optimized 0) - set(_library_position -1) - foreach(library ${${_unfiltered_libraries}}) - if("${library}" STREQUAL "debug") - set(_waiting_for_debug 1) - elseif("${library}" STREQUAL "optimized") - set(_waiting_for_optimized 1) - elseif(_waiting_for_debug) - list(FIND _debug_libraries "${library}" library_position) - if(library_position EQUAL -1) - list(APPEND ${_filtered_libraries} debug ${library}) - list(APPEND _debug_libraries ${library}) - endif() - set(_waiting_for_debug 0) - elseif(_waiting_for_optimized) - list(FIND _optimized_libraries "${library}" library_position) - if(library_position EQUAL -1) - list(APPEND ${_filtered_libraries} optimized ${library}) - list(APPEND _optimized_libraries ${library}) - endif() - set(_waiting_for_optimized 0) - else() - list(FIND _other_libraries "${library}" library_position) - if(library_position EQUAL -1) - list(APPEND ${_filtered_libraries} ${library}) - list(APPEND _other_libraries ${library}) - endif() - endif() - endforeach() -endmacro() - ### ---[ 3rd party libraries macro(find_boost) if(PCL_ALL_IN_ONE_INSTALLER) @@ -93,7 +51,7 @@ macro(find_boost) elseif(NOT BOOST_INCLUDEDIR) set(BOOST_INCLUDEDIR "@Boost_INCLUDE_DIR@") endif() - + include(${CMAKE_CURRENT_LIST_DIR}/Modules/AdditionalBoostVersions.cmake) set(Boost_ADDITIONAL_VERSIONS "@Boost_MAJOR_VERSION@.@Boost_MINOR_VERSION@.@Boost_SUBMINOR_VERSION@" "@Boost_MAJOR_VERSION@.@Boost_MINOR_VERSION@" ${Boost_ADDITIONAL_VERSIONS}) @@ -315,6 +273,7 @@ function(find_external_library _component _lib _is_optional) string(TOUPPER "${_component}" COMPONENT) string(TOUPPER "${_lib}" LIB) string(REGEX REPLACE "[.-]" "_" LIB ${LIB}) + if(${LIB}_FOUND) list(APPEND PCL_${COMPONENT}_INCLUDE_DIRS ${${LIB}_INCLUDE_DIRS}) set(PCL_${COMPONENT}_INCLUDE_DIRS ${PCL_${COMPONENT}_INCLUDE_DIRS} PARENT_SCOPE) @@ -324,22 +283,6 @@ function(find_external_library _component _lib _is_optional) set(ISVTK9ORGREATER TRUE) endif() endif() - - if(${LIB}_USE_FILE AND NOT ISVTK9ORGREATER ) - include(${${LIB}_USE_FILE}) - else() - list(APPEND PCL_${COMPONENT}_LIBRARY_DIRS "${${LIB}_LIBRARY_DIRS}") - set(PCL_${COMPONENT}_LIBRARY_DIRS ${PCL_${COMPONENT}_LIBRARY_DIRS} PARENT_SCOPE) - endif() - if(${LIB}_LIBRARIES) - list(APPEND PCL_${COMPONENT}_LINK_LIBRARIES "${${LIB}_LIBRARIES}") - set(PCL_${COMPONENT}_LINK_LIBRARIES ${PCL_${COMPONENT}_LINK_LIBRARIES} PARENT_SCOPE) - set(PCL_${LIB}_LIBRARIES ${${LIB}_LIBRARIES} PARENT_SCOPE) # Later appended to PCL_LIBRARIES - endif() - if(${LIB}_DEFINITIONS AND NOT ${LIB} STREQUAL "VTK") - list(APPEND PCL_${COMPONENT}_DEFINITIONS ${${LIB}_DEFINITIONS}) - set(PCL_${COMPONENT}_DEFINITIONS ${PCL_${COMPONENT}_DEFINITIONS} PARENT_SCOPE) - endif() else() if("${_is_optional}" STREQUAL "OPTIONAL") list(APPEND PCL_${COMPONENT}_DEFINITIONS "-DDISABLE_${LIB}") @@ -357,9 +300,6 @@ function(find_external_library _component _lib _is_optional) endif() endfunction() -macro(pcl_check_external_dependency _component) -endmacro() - #flatten dependencies recursivity is great \o/ macro(compute_dependencies TO_FIND_COMPONENTS) foreach(component ${${TO_FIND_COMPONENTS}}) @@ -388,63 +328,6 @@ macro(compute_dependencies TO_FIND_COMPONENTS) endforeach() endmacro() -### ---[ Find PCL - -if(PCL_FIND_QUIETLY) - set(QUIET_ QUIET) -else() - set(QUIET_) -endif() - -find_package(PkgConfig QUIET) - -file(TO_CMAKE_PATH "${PCL_DIR}" PCL_DIR) -if(WIN32 AND NOT MINGW) -# PCLConfig.cmake is installed to PCL_ROOT/cmake - get_filename_component(PCL_ROOT "${PCL_DIR}" PATH) - if(EXISTS "${PCL_ROOT}/3rdParty") - set(PCL_ALL_IN_ONE_INSTALLER ON) - endif() -else() -# PCLConfig.cmake is installed to PCL_ROOT/share/pcl-x.y - get_filename_component(PCL_ROOT "${CMAKE_CURRENT_LIST_DIR}/../.." ABSOLUTE) -endif() - -# check whether PCLConfig.cmake is found into a PCL installation or in a build tree -if(EXISTS "${PCL_ROOT}/include/pcl-${PCL_VERSION_MAJOR}.${PCL_VERSION_MINOR}/pcl/pcl_config.h") - # Found a PCL installation - # pcl_message("Found a PCL installation") - set(PCL_CONF_INCLUDE_DIR "${PCL_ROOT}/include/pcl-${PCL_VERSION_MAJOR}.${PCL_VERSION_MINOR}") - set(PCL_LIBRARY_DIRS "${PCL_ROOT}/@LIB_INSTALL_DIR@") -elseif(EXISTS "${PCL_ROOT}/include/pcl/pcl_config.h") - # Found a non-standard (likely ANDROID) PCL installation - # pcl_message("Found a PCL installation") - set(PCL_CONF_INCLUDE_DIR "${PCL_ROOT}/include") - set(PCL_LIBRARY_DIRS "${PCL_ROOT}/lib") -elseif(EXISTS "${PCL_DIR}/include/pcl/pcl_config.h") - # Found PCLConfig.cmake in a build tree of PCL - # pcl_message("PCL found into a build tree.") - set(PCL_CONF_INCLUDE_DIR "${PCL_DIR}/include") # for pcl_config.h - set(PCL_LIBRARY_DIRS "${PCL_DIR}/@LIB_INSTALL_DIR@") -else() - pcl_report_not_found("PCL can not be found on this machine") -endif() - -set(PCL_INCLUDE_DIRS "${PCL_CONF_INCLUDE_DIR}") - -#set a suffix for debug libraries -set(PCL_DEBUG_SUFFIX "@CMAKE_DEBUG_POSTFIX@") -set(PCL_RELEASE_SUFFIX "@CMAKE_RELEASE_POSTFIX@") - -set(PCL_SHARED_LIBS "@PCL_SHARED_LIBS@") - -#set SSE flags used compiling PCL -list(APPEND PCL_DEFINITIONS @PCLCONFIG_SSE_DEFINITIONS@) -list(APPEND PCL_COMPILE_OPTIONS @PCLCONFIG_SSE_COMPILE_OPTIONS@) - -#set AVX flags used compiling PCL -list(APPEND PCL_COMPILE_OPTIONS @PCLCONFIG_AVX_COMPILE_OPTIONS@) - set(pcl_all_components @PCLCONFIG_AVAILABLE_COMPONENTS@) list(LENGTH pcl_all_components PCL_NB_COMPONENTS) @@ -459,10 +342,6 @@ list(LENGTH pcl_all_components PCL_NB_COMPONENTS) # VTK components required by PCL set(PCL_VTK_COMPONENTS "@PCL_VTK_COMPONENTS@") -set(pcl_header_only_components 2d cuda_common geometry gpu_tracking modeler in_hand_scanner point_cloud_editor cloud_composer) - -include(FindPackageHandleStandardArgs) - #check if user provided a list of components #if no components at all or full list is given set PCL_FIND_ALL if(PCL_FIND_COMPONENTS) @@ -480,21 +359,6 @@ endif() compute_dependencies(PCL_TO_FIND_COMPONENTS) -# We do not need to find components that have been found already, e.g. during previous invocation -# of find_package(PCL). Filter them out. -foreach(component ${PCL_TO_FIND_COMPONENTS}) - string(TOUPPER "${component}" COMPONENT) - if(NOT PCL_${COMPONENT}_FOUND) - list(APPEND _PCL_TO_FIND_COMPONENTS ${component}) - endif() -endforeach() -set(PCL_TO_FIND_COMPONENTS ${_PCL_TO_FIND_COMPONENTS}) -unset(_PCL_TO_FIND_COMPONENTS) - -if(NOT PCL_TO_FIND_COMPONENTS) - return() -endif() - # compute external dependencies per component foreach(component ${PCL_TO_FIND_COMPONENTS}) foreach(opt ${pcl_${component}_opt_dep}) @@ -505,183 +369,10 @@ foreach(component ${PCL_TO_FIND_COMPONENTS}) endforeach() endforeach() +set(PCL_LIBRARIES) foreach(component ${PCL_TO_FIND_COMPONENTS}) - set(pcl_component pcl_${component}) - string(TOUPPER "${component}" COMPONENT) - - pcl_message(STATUS "looking for PCL_${COMPONENT}") - - string(REGEX REPLACE "^cuda_(.*)$" "\\1" cuda_component "${component}") - string(REGEX REPLACE "^gpu_(.*)$" "\\1" gpu_component "${component}") - - find_path(PCL_${COMPONENT}_INCLUDE_DIR - NAMES pcl/${component} - pcl/apps/${component} - pcl/cuda/${cuda_component} pcl/cuda/${component} - pcl/gpu/${gpu_component} pcl/gpu/${component} - HINTS ${PCL_INCLUDE_DIRS} - PATH_SUFFIXES - ${component}/include - apps/${component}/include - cuda/${cuda_component}/include - gpu/${gpu_component}/include - DOC "path to ${component} headers" - NO_DEFAULT_PATH) - mark_as_advanced(PCL_${COMPONENT}_INCLUDE_DIR) - - if(PCL_${COMPONENT}_INCLUDE_DIR) - list(APPEND PCL_${COMPONENT}_INCLUDE_DIRS "${PCL_${COMPONENT}_INCLUDE_DIR}") - else() - #pcl_message("No include directory found for pcl_${component}.") - endif() - - set(FPHSA_NAME_MISMATCHED 1) # Suppress warnings, see https://cmake.org/cmake/help/v3.17/module/FindPackageHandleStandardArgs.html - # Skip find_library for header only modules - list(FIND pcl_header_only_components ${component} _is_header_only) - if(_is_header_only EQUAL -1) - find_library(PCL_${COMPONENT}_LIBRARY ${pcl_component}${PCL_RELEASE_SUFFIX} - HINTS ${PCL_LIBRARY_DIRS} - DOC "path to ${pcl_component} library" - NO_DEFAULT_PATH) - get_filename_component(${component}_library_path - ${PCL_${COMPONENT}_LIBRARY} - PATH) - mark_as_advanced(PCL_${COMPONENT}_LIBRARY) - - find_library(PCL_${COMPONENT}_LIBRARY_DEBUG ${pcl_component}${PCL_DEBUG_SUFFIX} - HINTS ${PCL_LIBRARY_DIRS} - DOC "path to ${pcl_component} library debug" - NO_DEFAULT_PATH) - mark_as_advanced(PCL_${COMPONENT}_LIBRARY_DEBUG) - - if(PCL_${COMPONENT}_LIBRARY_DEBUG) - get_filename_component(${component}_library_path_debug - ${PCL_${COMPONENT}_LIBRARY_DEBUG} - PATH) - endif() - - # Restrict this to Windows users - if(NOT PCL_${COMPONENT}_LIBRARY AND WIN32) - # might be debug only - set(PCL_${COMPONENT}_LIBRARY ${PCL_${COMPONENT}_LIBRARY_DEBUG}) - endif() - - find_package_handle_standard_args(PCL_${COMPONENT} DEFAULT_MSG - PCL_${COMPONENT}_LIBRARY PCL_${COMPONENT}_INCLUDE_DIR) - else() - find_package_handle_standard_args(PCL_${COMPONENT} DEFAULT_MSG - PCL_${COMPONENT}_INCLUDE_DIR) - endif() - unset(FPHSA_NAME_MISMATCHED) - - if(PCL_${COMPONENT}_FOUND) - if(NOT "${PCL_${COMPONENT}_INCLUDE_DIRS}" STREQUAL "") - set(_filtered "") - foreach(_inc ${PCL_${COMPONENT}_INCLUDE_DIRS}) - if(EXISTS ${_inc}) - list(APPEND _filtered "${_inc}") - endif() - endforeach() - list(REMOVE_DUPLICATES _filtered) - set(PCL_${COMPONENT}_INCLUDE_DIRS ${_filtered}) - list(APPEND PCL_INCLUDE_DIRS ${_filtered}) - endif() - mark_as_advanced(PCL_${COMPONENT}_INCLUDE_DIRS) - if(_is_header_only EQUAL -1) - list(APPEND PCL_DEFINITIONS ${PCL_${COMPONENT}_DEFINITIONS}) - list(APPEND PCL_LIBRARY_DIRS ${component_library_path}) - if(PCL_${COMPONENT}_LIBRARY_DEBUG) - list(APPEND PCL_LIBRARY_DIRS ${component_library_path_debug}) - endif() - list(APPEND PCL_COMPONENTS ${pcl_component}) - mark_as_advanced(PCL_${COMPONENT}_LIBRARY PCL_${COMPONENT}_LIBRARY_DEBUG) - endif() - # Append internal dependencies - foreach(int_dep ${pcl_${component}_int_dep}) - string(TOUPPER "${int_dep}" INT_DEP) - if(PCL_${INT_DEP}_FOUND) - list(APPEND PCL_${COMPONENT}_INCLUDE_DIRS ${PCL_${INT_DEP}_INCLUDE_DIRS}) - if(PCL_${INT_DEP}_LIBRARIES) - list(APPEND PCL_${COMPONENT}_LINK_LIBRARIES "${PCL_${INT_DEP}_LIBRARIES}") - endif() - endif() - endforeach() - if(_is_header_only EQUAL -1) - add_library(${pcl_component} @PCL_LIB_TYPE@ IMPORTED) - if(PCL_${COMPONENT}_LIBRARY_DEBUG) - set_target_properties(${pcl_component} - PROPERTIES - IMPORTED_CONFIGURATIONS "RELEASE;DEBUG" - IMPORTED_LOCATION_RELEASE "${PCL_${COMPONENT}_LIBRARY}" - IMPORTED_LOCATION_DEBUG "${PCL_${COMPONENT}_LIBRARY_DEBUG}" - IMPORTED_IMPLIB_RELEASE "${PCL_${COMPONENT}_LIBRARY}" - IMPORTED_IMPLIB_DEBUG "${PCL_${COMPONENT}_LIBRARY_DEBUG}" - ) - else() - set_target_properties(${pcl_component} - PROPERTIES - IMPORTED_LOCATION "${PCL_${COMPONENT}_LIBRARY}" - IMPORTED_IMPLIB "${PCL_${COMPONENT}_LIBRARY}" - ) - endif() - else() # header-only - add_library(${pcl_component} INTERFACE IMPORTED) - endif() - - foreach(def ${PCL_DEFINITIONS}) - string(REPLACE " " ";" def2 ${def}) - string(REGEX REPLACE "^-D" "" def3 "${def2}") - list(APPEND definitions ${def3}) - endforeach() - if(CMAKE_VERSION VERSION_LESS 3.11) - set_target_properties(${pcl_component} - PROPERTIES - INTERFACE_COMPILE_DEFINITIONS "${definitions}" - INTERFACE_COMPILE_OPTIONS "$<$:${PCL_COMPILE_OPTIONS}>" - INTERFACE_COMPILE_FEATURES "@PCL_CXX_COMPILE_FEATURES@" - INTERFACE_INCLUDE_DIRECTORIES "${PCL_${COMPONENT}_INCLUDE_DIRS};${PCL_CONF_INCLUDE_DIR}" - INTERFACE_LINK_LIBRARIES "${PCL_${COMPONENT}_LINK_LIBRARIES}" - ) - else() - set_target_properties(${pcl_component} - PROPERTIES - INTERFACE_COMPILE_DEFINITIONS "${definitions}" - INTERFACE_COMPILE_OPTIONS "$<$:${PCL_COMPILE_OPTIONS}>" - INTERFACE_COMPILE_FEATURES "@PCL_CXX_COMPILE_FEATURES@" - INTERFACE_INCLUDE_DIRECTORIES "${PCL_${COMPONENT}_INCLUDE_DIRS};${PCL_CONF_INCLUDE_DIR}" - ) - # If possible, we use target_link_libraries to avoid problems with link-type keywords, - # see https://github.com/PointCloudLibrary/pcl/issues/2989 - # target_link_libraries on imported libraries is supported only since CMake 3.11 - target_link_libraries(${pcl_component} INTERFACE ${PCL_${COMPONENT}_LINK_LIBRARIES}) - endif() - set(PCL_${COMPONENT}_LIBRARIES ${pcl_component}) - endif() + # Add the targets file + include("${CMAKE_CURRENT_LIST_DIR}/pcl_${component}.cmake") + check_required_components(${component}) + list(APPEND PCL_LIBRARIES "pcl::pcl_${component}") endforeach() - -if(NOT "${PCL_INCLUDE_DIRS}" STREQUAL "") - list(REMOVE_DUPLICATES PCL_INCLUDE_DIRS) -endif() - -if(NOT "${PCL_LIBRARY_DIRS}" STREQUAL "") - list(REMOVE_DUPLICATES PCL_LIBRARY_DIRS) -endif() - -if(NOT "${PCL_DEFINITIONS}" STREQUAL "") - list(REMOVE_DUPLICATES PCL_DEFINITIONS) -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 ${PCL_BOOST_LIBRARIES} ${PCL_OPENNI_LIBRARIES} ${PCL_OPENNI2_LIBRARIES} ${PCL_ENSENSO_LIBRARIES} ${PCL_davidSDK_LIBRARIES} ${PCL_DSSDK_LIBRARIES} ${PCL_RSSDK_LIBRARIES} ${PCL_RSSDK2_LIBRARIES} ${PCL_VTK_LIBRARIES}) -if (TARGET FLANN::FLANN) - list(APPEND PCL_LIBRARIES FLANN::FLANN) -endif() - -if(TARGET QHULL::QHULL) - list(APPEND PCL_LIBRARIES QHULL::QHULL) -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) diff --git a/PCLConfigVersion.cmake.in b/PCLConfigVersion.cmake.in deleted file mode 100644 index e889ed57570..00000000000 --- a/PCLConfigVersion.cmake.in +++ /dev/null @@ -1,13 +0,0 @@ -# Check whether the requested PACKAGE_FIND_VERSION is compatible - -set(PACKAGE_VERSION @PCL_VERSION@) - -# Check whether the requested PACKAGE_FIND_VERSION is compatible -if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") - set(PACKAGE_VERSION_COMPATIBLE FALSE) -else() - set(PACKAGE_VERSION_COMPATIBLE TRUE) - if("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") - set(PACKAGE_VERSION_EXACT TRUE) - endif() -endif() diff --git a/cmake/pcl_find_cuda.cmake b/cmake/pcl_find_cuda.cmake index 21aeac2e1dc..fe7f0a4c124 100644 --- a/cmake/pcl_find_cuda.cmake +++ b/cmake/pcl_find_cuda.cmake @@ -47,7 +47,7 @@ if(CUDA_FOUND) message(STATUS "CMAKE_CUDA_ARCHITECTURES: ${CMAKE_CUDA_ARCHITECTURES}") #Add empty project as its not required with newer CMake - add_library(pcl_cuda INTERFACE) + PCL_ADD_LIBRARY(pcl_cuda COMPONENT ekstern_cuda) else() # Generate SASS set(CMAKE_CUDA_ARCHITECTURES ${CUDA_ARCH_BIN}) @@ -56,7 +56,7 @@ if(CUDA_FOUND) set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -gencode arch=compute_${ver},code=compute_${ver}") message(STATUS "CMAKE_CUDA_FLAGS: ${CMAKE_CUDA_FLAGS}") - add_library(pcl_cuda INTERFACE) + PCL_ADD_LIBRARY(pcl_cuda COMPONENT ekstern_cuda) target_include_directories(pcl_cuda INTERFACE ${CUDA_TOOLKIT_INCLUDE}) endif () diff --git a/cmake/pcl_pclconfig.cmake b/cmake/pcl_pclconfig.cmake index f9941b14355..212e549926d 100644 --- a/cmake/pcl_pclconfig.cmake +++ b/cmake/pcl_pclconfig.cmake @@ -93,10 +93,18 @@ if(Boost_SERIALIZATION_FOUND) string(APPEND PCLCONFIG_AVAILABLE_BOOST_MODULES " serialization") endif() -configure_file("${PCL_SOURCE_DIR}/PCLConfig.cmake.in" - "${PCL_BINARY_DIR}/PCLConfig.cmake" @ONLY) -configure_file("${PCL_SOURCE_DIR}/PCLConfigVersion.cmake.in" - "${PCL_BINARY_DIR}/PCLConfigVersion.cmake" @ONLY) +include(CMakePackageConfigHelpers) + +configure_package_config_file(PCLConfig.cmake.in + ${PCL_BINARY_DIR}/PCLConfig.cmake + INSTALL_DESTINATION cmake + PATH_VARS INCLUDE_INSTALL_DIR) + +write_basic_package_version_file( + ${PCL_BINARY_DIR}/PCLConfigVersion.cmake + COMPATIBILITY AnyNewerVersion + ) + install(FILES "${PCL_BINARY_DIR}/PCLConfig.cmake" "${PCL_BINARY_DIR}/PCLConfigVersion.cmake" diff --git a/cmake/pcl_targets.cmake b/cmake/pcl_targets.cmake index 2da076c23c5..b66c8dd7e20 100644 --- a/cmake/pcl_targets.cmake +++ b/cmake/pcl_targets.cmake @@ -192,38 +192,60 @@ function(PCL_ADD_LIBRARY _name) message(FATAL_ERROR "PCL_ADD_LIBRARY requires parameter COMPONENT.") endif() - add_library(${_name} ${PCL_LIB_TYPE} ${ARGS_SOURCES}) - PCL_ADD_VERSION_INFO(${_name}) - target_compile_features(${_name} PUBLIC ${PCL_CXX_COMPILE_FEATURES}) - - target_link_libraries(${_name} Threads::Threads) - if(TARGET OpenMP::OpenMP_CXX) - target_link_libraries(${_name} OpenMP::OpenMP_CXX) - endif() + if(NOT ARGS_SOURCES) + add_library(${_name} INTERFACE) + else() + add_library(${_name} ${PCL_LIB_TYPE} ${ARGS_SOURCES}) + + target_compile_features(${_name} PUBLIC ${PCL_CXX_COMPILE_FEATURES}) + + target_include_directories(${_name} PUBLIC + $ + $ + ) + + target_link_libraries(${_name} Threads::Threads) + + if(TARGET OpenMP::OpenMP_CXX) + target_link_libraries(${_name} OpenMP::OpenMP_CXX) + endif() - if((UNIX AND NOT ANDROID) OR MINGW) - target_link_libraries(${_name} m ${ATOMIC_LIBRARY}) - endif() + if((UNIX AND NOT ANDROID) OR MINGW) + target_link_libraries(${_name} m ${ATOMIC_LIBRARY}) + endif() - if(MINGW) - target_link_libraries(${_name} gomp) - endif() + if(MINGW) + target_link_libraries(${_name} gomp) + endif() - if(MSVC) - target_link_libraries(${_name} delayimp.lib) # because delay load is enabled for openmp.dll + if(MSVC) + target_link_libraries(${_name} delayimp.lib) # because delay load is enabled for openmp.dll + endif() endif() + + PCL_ADD_VERSION_INFO(${_name}) - set_target_properties(${_name} PROPERTIES - VERSION ${PCL_VERSION} - SOVERSION ${PCL_VERSION_MAJOR}.${PCL_VERSION_MINOR} - DEFINE_SYMBOL "PCLAPI_EXPORTS") - set_target_properties(${_name} PROPERTIES FOLDER "Libraries") + if(ARGS_SOURCES OR CMAKE_VERSION VERSION_GREATER_EQUAL 3.19) + set_target_properties(${_name} PROPERTIES + VERSION ${PCL_VERSION} + SOVERSION ${PCL_VERSION_MAJOR}.${PCL_VERSION_MINOR} + DEFINE_SYMBOL "PCLAPI_EXPORTS") + set_target_properties(${_name} PROPERTIES FOLDER "Libraries") + endif() install(TARGETS ${_name} + EXPORT ${_name}Targets RUNTIME DESTINATION ${BIN_INSTALL_DIR} COMPONENT pcl_${ARGS_COMPONENT} LIBRARY DESTINATION ${LIB_INSTALL_DIR} COMPONENT pcl_${ARGS_COMPONENT} ARCHIVE DESTINATION ${LIB_INSTALL_DIR} COMPONENT pcl_${ARGS_COMPONENT}) + install( + EXPORT ${_name}Targets + NAMESPACE pcl:: + FILE ${_name}.cmake + DESTINATION ${PCLCONFIG_INSTALL_DIR} + ) + # Copy PDB if available if(MSVC AND ${PCL_LIB_TYPE} EQUAL "SHARED") install(FILES $ DESTINATION ${BIN_INSTALL_DIR} OPTIONAL) @@ -270,9 +292,17 @@ function(PCL_CUDA_ADD_LIBRARY _name) set_target_properties(${_name} PROPERTIES FOLDER "Libraries") install(TARGETS ${_name} + EXPORT ${_name}Targets RUNTIME DESTINATION ${BIN_INSTALL_DIR} COMPONENT pcl_${ARGS_COMPONENT} LIBRARY DESTINATION ${LIB_INSTALL_DIR} COMPONENT pcl_${ARGS_COMPONENT} ARCHIVE DESTINATION ${LIB_INSTALL_DIR} COMPONENT pcl_${ARGS_COMPONENT}) + + install( + EXPORT ${_name}Targets + NAMESPACE pcl:: + FILE ${_name}.cmake + DESTINATION ${LIB_INSTALL_DIR}/cmake + ) endfunction() ############################################################################### @@ -911,7 +941,6 @@ macro(PCL_ADD_GRABBER_DEPENDENCY _name _description) message(STATUS "${_description}: not building because ${_name} not found") else() set(HAVE_${_name_capitalized} TRUE) - include_directories(SYSTEM "${${_name_capitalized}_INCLUDE_DIRS}") endif() endif() endmacro() diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index fd449f2eff6..103cdd5b0b4 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -174,11 +174,6 @@ set(kissfft_srcs set(LIB_NAME "pcl_${SUBSYS_NAME}") PCL_ADD_LIBRARY(${LIB_NAME} COMPONENT ${SUBSYS_NAME} SOURCES ${srcs} ${kissfft_srcs} ${incs} ${common_incs} ${impl_incs} ${tools_incs} ${kissfft_incs} ${common_incs_impl} ${range_image_incs} ${range_image_incs_impl}) -target_include_directories(${LIB_NAME} PUBLIC - $ - $ -) - target_link_libraries(${LIB_NAME} Boost::boost Eigen3::Eigen) if(MSVC AND NOT (MSVC_VERSION LESS 1915)) diff --git a/cuda/io/CMakeLists.txt b/cuda/io/CMakeLists.txt index 5ddfc90b1b4..52e379d2008 100644 --- a/cuda/io/CMakeLists.txt +++ b/cuda/io/CMakeLists.txt @@ -36,7 +36,7 @@ set(incs set(LIB_NAME "pcl_${SUBSYS_NAME}") include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include") PCL_CUDA_ADD_LIBRARY(${LIB_NAME} COMPONENT ${SUBSYS_NAME} SOURCES ${srcs} ${incs}) -target_link_libraries(${LIB_NAME} pcl_common) +target_link_libraries(${LIB_NAME} pcl_common pcl_io) PCL_MAKE_PKGCONFIG(${LIB_NAME} COMPONENT ${SUBSYS_NAME} DESC ${SUBSYS_DESC} PCL_DEPS ${SUBSYS_DEPS} EXT_DEPS ${SUBSYS_EXT_DEPS}) diff --git a/geometry/CMakeLists.txt b/geometry/CMakeLists.txt index 0ec3e6fe5b0..d5fe3eb0527 100644 --- a/geometry/CMakeLists.txt +++ b/geometry/CMakeLists.txt @@ -39,8 +39,8 @@ set(impl_incs set(LIB_NAME "pcl_${SUBSYS_NAME}") include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include") -add_library(${LIB_NAME} INTERFACE) -target_include_directories(${LIB_NAME} INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include") +PCL_ADD_LIBRARY(${LIB_NAME} COMPONENT ${SUBSYS_NAME}) + target_link_libraries(${LIB_NAME} INTERFACE Boost::boost pcl_common) PCL_MAKE_PKGCONFIG(${LIB_NAME} COMPONENT ${SUBSYS_NAME} DESC ${SUBSYS_DESC} PCL_DEPS ${SUBSYS_DEPS} HEADER_ONLY) diff --git a/io/CMakeLists.txt b/io/CMakeLists.txt index 470796f9a1c..bb0993bd080 100644 --- a/io/CMakeLists.txt +++ b/io/CMakeLists.txt @@ -1,13 +1,13 @@ set(SUBSYS_NAME io) set(SUBSYS_DESC "Point cloud IO library") -set(SUBSYS_DEPS common octree) +set(SUBSYS_DEPS common io_ply octree) set(SUBSYS_EXT_DEPS boost eigen3) PCL_SUBSYS_OPTION(build "${SUBSYS_NAME}" "${SUBSYS_DESC}" ON) if(WIN32) PCL_SUBSYS_DEPEND(build NAME ${SUBSYS_NAME} DEPS ${SUBSYS_DEPS} OPT_DEPS openni openni2 ensenso davidSDK dssdk rssdk rssdk2 pcap png vtk OpenMP EXT_DEPS ${SUBSYS_EXT_DEPS}) else() - PCL_SUBSYS_DEPEND(build NAME ${SUBSYS_NAME} DEPS ${SUBSYS_DEPS} OPT_DEPS openni openni2 ensenso davidSDK dssdk pcap png vtk libusb OpenMP EXT_DEPS ${SUBSYS_EXT_DEPS}) + PCL_SUBSYS_DEPEND(build NAME ${SUBSYS_NAME} DEPS ${SUBSYS_DEPS} OPT_DEPS openni openni2 ensenso davidSDK dssdk rssdk rssdk2 pcap png vtk OpenMP libusb EXT_DEPS ${SUBSYS_EXT_DEPS}) endif() PCL_ADD_DOC("${SUBSYS_NAME}") @@ -195,23 +195,6 @@ if(VTK_FOUND AND NOT ANDROID) set(VTK_DEFINES -DPCL_BUILT_WITH_VTK) endif() -set(PLY_SOURCES src/ply/ply_parser.cpp) -set(PLY_INCLUDES - "include/pcl/${SUBSYS_NAME}/ply/byte_order.h" - "include/pcl/${SUBSYS_NAME}/ply/io_operators.h" - "include/pcl/${SUBSYS_NAME}/ply/ply.h" - "include/pcl/${SUBSYS_NAME}/ply/ply_parser.h" -) - -PCL_ADD_LIBRARY(pcl_io_ply COMPONENT ${SUBSYS_NAME} SOURCES ${PLY_SOURCES} ${PLY_INCLUDES}) -if(MINGW) - # libws2_32 isn't added by default for MinGW - target_link_libraries(pcl_io_ply ws2_32) -endif() -PCL_ADD_INCLUDES("${SUBSYS_NAME}" "${SUBSYS_NAME}/ply" ${PLY_INCLUDES}) -target_include_directories(pcl_io_ply PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include") -target_link_libraries(pcl_io_ply pcl_common Boost::boost) - set(srcs src/debayer.cpp src/pcd_grabber.cpp @@ -340,9 +323,8 @@ add_definitions(${VTK_DEFINES}) PCL_ADD_LIBRARY(${LIB_NAME} COMPONENT ${SUBSYS_NAME} SOURCES ${srcs} ${incs} ${compression_incs} ${impl_incs} ${OPENNI_INCLUDES} ${OPENNI2_INCLUDES}) -target_include_directories(${LIB_NAME} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include") - target_link_libraries("${LIB_NAME}" Boost::boost Boost::iostreams pcl_common pcl_io_ply) + if(TARGET Boost::filesystem) target_link_libraries("${LIB_NAME}" Boost::filesystem) endif() @@ -382,10 +364,12 @@ if(LIBUSB_FOUND) endif() if(WITH_OPENNI2) + target_include_directories(${LIB_NAME} SYSTEM PUBLIC ${OPENNI2_INCLUDE_DIRS}) target_link_libraries(${LIB_NAME} ${OPENNI2_LIBRARIES}) endif() if(WITH_OPENNI) + target_include_directories(${LIB_NAME} SYSTEM PUBLIC ${OPENNI_INCLUDE_DIRS}) target_link_libraries("${LIB_NAME}" ${OPENNI_LIBRARIES}) if(VTK_FOUND AND (NOT ${VTK_VERSION} VERSION_LESS 9.0)) target_link_libraries("${LIB_NAME}" VTK::FiltersCore VTK::FiltersGeneral) @@ -393,6 +377,7 @@ if(WITH_OPENNI) endif() if(WITH_FZAPI) + target_include_directories(${LIB_NAME} SYSTEM PUBLIC ${FZAPI_INCLUDE_DIRS}) target_link_libraries("${LIB_NAME}" ${FZAPI_LIBS}) if(WIN32) target_link_libraries("${LIB_NAME}" Version.lib) @@ -400,26 +385,32 @@ if(WITH_FZAPI) endif() if(WITH_ENSENSO) + target_include_directories(${LIB_NAME} SYSTEM PUBLIC ${ENSENSO_INCLUDE_DIRS}) target_link_libraries(${LIB_NAME} ${ENSENSO_LIBRARIES}) endif() if(WITH_DAVIDSDK) + target_include_directories(${LIB_NAME} SYSTEM PUBLIC ${DAVIDSDK_INCLUDE_DIRS}) target_link_libraries(${LIB_NAME} ${DAVIDSDK_LIBRARIES}) endif() if(WITH_DSSDK) + target_include_directories(${LIB_NAME} SYSTEM PUBLIC ${DSSDK_INCLUDE_DIRS}) target_link_libraries(${LIB_NAME} ${DSSDK_LIBRARIES}) endif() if(WITH_RSSDK) + target_include_directories(${LIB_NAME} SYSTEM PUBLIC ${RSSDK_INCLUDE_DIRS}) target_link_libraries(${LIB_NAME} ${RSSDK_LIBRARIES}) endif() if(WITH_RSSDK2) + target_include_directories(${LIB_NAME} SYSTEM PUBLIC ${RSSDK2_INCLUDE_DIRS}) target_link_libraries(${LIB_NAME} ${RSSDK2_LIBRARIES}) endif() if(PCAP_FOUND) + target_include_directories(${LIB_NAME} SYSTEM PUBLIC ${PCAP_INCLUDE_DIRS}) target_link_libraries("${LIB_NAME}" ${PCAP_LIBRARIES}) endif() diff --git a/io/include/pcl/io/ply_io.h b/io/include/pcl/io/ply_io.h index 86e540771ae..841ad74481d 100644 --- a/io/include/pcl/io/ply_io.h +++ b/io/include/pcl/io/ply_io.h @@ -43,7 +43,7 @@ #include #include // for copyPointCloud #include -#include +#include #include #include diff --git a/io_ply/CMakeLists.txt b/io_ply/CMakeLists.txt new file mode 100644 index 00000000000..2e66c2ff535 --- /dev/null +++ b/io_ply/CMakeLists.txt @@ -0,0 +1,30 @@ +#Helper library +set(SUBSYS_NAME io_ply) +set(SUBSYS_DESC "Point cloud IO ply library") +set(SUBSYS_DEPS common) +set(SUBSYS_EXT_DEPS boost eigen3) + +set(PLY_SOURCES src/ply_parser.cpp) +set(PLY_INCLUDES + "include/pcl/io_ply/byte_order.h" + "include/pcl/io_ply/io_operators.h" + "include/pcl/io_ply/ply.h" + "include/pcl/io_ply/ply_parser.h" +) + +PCL_SUBSYS_OPTION(build "${SUBSYS_NAME}" "${SUBSYS_DESC}" ON) +PCL_SUBSYS_DEPEND(build NAME ${SUBSYS_NAME} DEPS ${SUBSYS_DEPS} EXT_DEPS ${EXT_DEPS}) + +if(NOT build) + return() +endif() + +set(LIB_NAME "pcl_${SUBSYS_NAME}") +PCL_ADD_LIBRARY(${LIB_NAME} COMPONENT ${SUBSYS_NAME} SOURCES ${PLY_SOURCES} ${PLY_INCLUDES}) +if(MINGW) + # libws2_32 isn't added by default for MinGW + target_link_libraries(${LIB_NAME} ws2_32) +endif() +PCL_ADD_INCLUDES("${SUBSYS_NAME}" "${SUBSYS_NAME}/ply" ${PLY_INCLUDES}) + +target_link_libraries(${LIB_NAME} pcl_common Boost::boost) diff --git a/io/include/pcl/io/ply/byte_order.h b/io_ply/include/pcl/io_ply/byte_order.h similarity index 100% rename from io/include/pcl/io/ply/byte_order.h rename to io_ply/include/pcl/io_ply/byte_order.h diff --git a/io/include/pcl/io/ply/io_operators.h b/io_ply/include/pcl/io_ply/io_operators.h similarity index 100% rename from io/include/pcl/io/ply/io_operators.h rename to io_ply/include/pcl/io_ply/io_operators.h diff --git a/io/include/pcl/io/ply/ply.h b/io_ply/include/pcl/io_ply/ply.h similarity index 99% rename from io/include/pcl/io/ply/ply.h rename to io_ply/include/pcl/io_ply/ply.h index f658ed69a88..cfaf88523de 100644 --- a/io/include/pcl/io/ply/ply.h +++ b/io_ply/include/pcl/io_ply/ply.h @@ -40,7 +40,7 @@ #pragma once -#include +#include #include // for int8_t, int16_t, ... /** \file ply.h contains standard typedefs and generic type traits diff --git a/io/include/pcl/io/ply/ply_parser.h b/io_ply/include/pcl/io_ply/ply_parser.h similarity index 99% rename from io/include/pcl/io/ply/ply_parser.h rename to io_ply/include/pcl/io_ply/ply_parser.h index 3023d566607..1aeb9c33ad5 100644 --- a/io/include/pcl/io/ply/ply_parser.h +++ b/io_ply/include/pcl/io_ply/ply_parser.h @@ -40,8 +40,8 @@ #pragma once -#include -#include +#include +#include #include #include diff --git a/io/src/ply/ply_parser.cpp b/io_ply/src/ply_parser.cpp similarity index 99% rename from io/src/ply/ply_parser.cpp rename to io_ply/src/ply_parser.cpp index 7e79d2d6162..ebdd60a5d90 100644 --- a/io/src/ply/ply_parser.cpp +++ b/io_ply/src/ply_parser.cpp @@ -38,7 +38,7 @@ * */ -#include +#include #include // for find_if #include // for ifstream diff --git a/octree/CMakeLists.txt b/octree/CMakeLists.txt index 5f5a431e928..b48fb08e688 100644 --- a/octree/CMakeLists.txt +++ b/octree/CMakeLists.txt @@ -48,9 +48,11 @@ set(impl_incs ) set(LIB_NAME "pcl_${SUBSYS_NAME}") + PCL_ADD_LIBRARY(${LIB_NAME} COMPONENT ${SUBSYS_NAME} SOURCES ${srcs} ${incs} ${impl_incs}) + target_link_libraries("${LIB_NAME}" pcl_common) -target_include_directories(${LIB_NAME} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include") + PCL_MAKE_PKGCONFIG(${LIB_NAME} COMPONENT ${SUBSYS_NAME} DESC ${SUBSYS_DESC} PCL_DEPS ${SUBSYS_DEPS}) # Install include files diff --git a/recognition/CMakeLists.txt b/recognition/CMakeLists.txt index 2cda7232be4..919633ff420 100644 --- a/recognition/CMakeLists.txt +++ b/recognition/CMakeLists.txt @@ -158,14 +158,19 @@ else() endif() set(LIB_NAME "pcl_${SUBSYS_NAME}") -include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include") + PCL_ADD_LIBRARY(${LIB_NAME} COMPONENT ${SUBSYS_NAME} SOURCES ${srcs} ${incs} ${impl_incs} ${face_detection_incs} ${ransac_based_incs} ${ransac_based_impl_incs} ${hv_incs} ${hv_impl_incs} ${cg_incs} ${cg_impl_incs} ${metslib_incs}) + target_link_libraries("${LIB_NAME}" pcl_common pcl_kdtree pcl_octree pcl_search pcl_features pcl_registration pcl_sample_consensus pcl_filters pcl_ml pcl_io) if(HAVE_METSLIB) target_include_directories(${LIB_NAME} SYSTEM PUBLIC ${METSLIB_INCLUDE_DIRS}) else() - target_include_directories(${LIB_NAME} SYSTEM PUBLIC ${PCL_SOURCE_DIR}/recognition/include/pcl/recognition/3rdparty/) + target_include_directories(${LIB_NAME} PUBLIC + $ + $ + ) + endif() PCL_MAKE_PKGCONFIG(${LIB_NAME} COMPONENT ${SUBSYS_NAME} DESC ${SUBSYS_DESC} PCL_DEPS ${SUBSYS_DEPS}) diff --git a/tools/ply2obj.cpp b/tools/ply2obj.cpp index df1e4094651..9cc7d9026e3 100644 --- a/tools/ply2obj.cpp +++ b/tools/ply2obj.cpp @@ -38,7 +38,7 @@ * */ -#include +#include #include #include diff --git a/tools/ply2ply.cpp b/tools/ply2ply.cpp index e749f4b2c69..c54bce1e993 100644 --- a/tools/ply2ply.cpp +++ b/tools/ply2ply.cpp @@ -37,7 +37,7 @@ * */ -#include +#include #include #include diff --git a/tools/ply2raw.cpp b/tools/ply2raw.cpp index 1fd1f833ab9..edf60b545b0 100644 --- a/tools/ply2raw.cpp +++ b/tools/ply2raw.cpp @@ -37,7 +37,7 @@ * */ -#include +#include #include #include