首页 > 解决方案 > Use CGAL and PCL in same project

问题描述

I am trying to use CGAL and PCL in the same project. Both PCL and CGAL should be installed correctly on my computer, since the examples work. I created a CMakeList.txt file which references both PCL and CGAL I am able to configure it without the CMake GUI showing any problems, but when I open the project .sln the CGAL includes have errors for example: Cannot open include file: 'CGAL/Simple_cartesian.h': No such file or directory All the PCL includes work fine. If I delete all the PCL references from the CMakeList.txt then the CGAL includes work. I am suspecting that I am doing something wrong in my CMakeList.txt.
Does anyone know what I am doing wrong?

Thank you!

Below is my CMakeList.txt

cmake_minimum_required(VERSION 3.1...3.15)

project(PC_Svr2)


find_package(CGAL QUIET)

if ( CGAL_FOUND )

  # create a target per cppfile

  file(GLOB cppfiles RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)

  foreach(cppfile ${cppfiles})
    create_single_source_cgal_program( "${cppfile}" )
  endforeach()

else()

    message(STATUS "This program requires the CGAL library, and will not be compiled.")

endif()
find_package(PCL 1.2 REQUIRED)

include_directories(${PCL_INCLUDE_DIRS})

link_directories(${PCL_LIBRARY_DIRS})

add_definitions(${PCL_DEFINITIONS})

add_executable (PC_Svr2 cloud_viewer.cpp)


target_link_libraries (PC_Svr2 ${PCL_LIBRARIES})

message("PCL_IO_LIBRARIES - ${PCL_IO_LIBRARIES}")

标签: c++cmakecgal

解决方案


  file(GLOB cppfiles RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)

  foreach(cppfile ${cppfiles})
    create_single_source_cgal_program( "${cppfile}" )
  endforeach()

That is creating a single target from each of the cpp files in CMAKE_CURRENT_SOURCE_DIR. I don't think that is what you want. If I understand things correctly, your code is in cloud_viewer.cpp, then you should remove the loop and just link with cgal with your target_link_libraries: target_link_libraries(PCS_Svr2 CGAL::CGAL ${PCL_LIBRARIES})

You can have a look at that page for details.


推荐阅读