Скомпилируйте пример кода PCL с помощью QtCreator, используя файл CMakeLists.

Я пытаюсь скомпилировать пример PCL с помощью QtCreator, используя файл CMakeLists.txt. Файл FindPCL.cmake (взято отсюда: последний из прикрепленных файлов) находится в том же каталоге, что и исходные файлы.

Мой файл CMakeLists.txt:

cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
project(pclcmake)
list(APPEND CMAKE_MODULE_PATH "C:/CMake2.8/bin")
set(PCL_ROOT "E:/LIBRERIAS/PCL1.5.1")
set(PCL_DIR "E:/LIBRERIAS/PCL1.5.1/cmake")
find_package(PCL 1.5.1 REQUIRED COMPONENTS common octree io)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable(pcl_cmake main.cpp)
target_link_libraries(pcl_cmake ${PCL_COMMON_LIBRARIES} ${PCL_OCTREE_LIBRARIES} ${PCL_IO_LIBRARIES})

Код, который я пытаюсь скомпилировать, таков:

#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>

#include <iostream>

int main(int argc, char* argv[]) {
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);

  if (pcl::io::loadPCDFile<pcl::PointXYZ> ("test_pcd.pcd", *cloud) == -1) //* load the file
  {
     std::cout << "Nope\n";
     return (-1);
  }
  std::cout << "Loaded " << cloud->width * cloud->height << " data points from test_pcd.pcd with the following fields: " << std::endl;
  for (size_t i = 0; i < cloud->points.size (); ++i)
     std::cout << "    " << cloud->points[i].x << " "    << cloud->points[i].y << " "    << cloud->points[i].z << std::endl;

  return (0);
}

Я также установил переменную PCL_DIR в моем файле CMakeLists.txt на каталог установки PCL, как сказано в руководстве по PCL Использование PCL в собственном проекте внизу.

Наконец, ошибка, которую я получаю:

CMake Error at CMakeLists.txt:6 (find_package):
  By not providing "FindPCL.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "PCL", but
  CMake did not find one.

  Could not find a package configuration file provided by "PCL" (requested
  version 1.5.1) with any of the following names:

    PCLConfig.cmake
    pcl-config.cmake

  Add the installation prefix of "PCL" to CMAKE_PREFIX_PATH or set "PCL_DIR"
  to a directory containing one of the above files.  If "PCL" provides a
  separate development package or SDK, be sure it has been installed.

Есть идеи? Заранее спасибо.

PS: В файле CMakeLists я указываю CMAKE_MODULE_PATH на каталог двоичного файла CMake. Это правильно?

PS2: я использую компилятор MingW.

PS3: SO — это 64-разрядная версия Windows 7.


person Adri C.S.    schedule 29.11.2012    source источник
comment
Ооооооооооооооооооооооооооооооооооооооооооооооооой!! Я отредактирую пост!. Спасибо!   -  person Adri C.S.    schedule 29.11.2012
comment
Кроме того, я использую компилятор MingW. Я уже добавил эту информацию в пост.   -  person Adri C.S.    schedule 29.11.2012
comment
Вы получили правильный ответ?   -  person Snail    schedule 22.05.2017
comment
@YeYeahPing прости?   -  person Adri C.S.    schedule 22.05.2017
comment
Я тоже столкнулся с этой проблемой.   -  person Snail    schedule 22.05.2017
comment
@YeYeahPing Я не нашел для этого решения.   -  person Adri C.S.    schedule 22.05.2017


Ответы (1)


Вы должны установить CMAKE_MODULE_PATH в каталог, который содержит FindPCL.cmake. Если этот каталог является стандартным каталогом CMake для модулей (share/cmake/Modules), он вам вообще не нужен.

Поэтому установка CMAKE_MODULE_PATH в каталог bin/ неверна.

person arrowd    schedule 29.11.2012
comment
Привет и спасибо за ваш ответ. FindPCl.cmake находится в другом каталоге (PCL1.5.1/cmake). Итак, я пробовал: list(APPEND CMAKE_MODULE_PATH "E:/LIBRERIAS/PCL1.5.1/cmake"), он терпит неудачу с той же ошибкой. Затем я попытался изменить строку list(APPEND ...) на set(CMAKE_MODULE_PATH "E:/LIBRERIAS/PCL1.5.1/cmake"), но снова не удалось. Кроме того, комментирование или раскомментирование строки set(PCL_DIR...) не имеет значения, это снова не работает. :( - person Adri C.S.; 29.11.2012
comment
Попробуйте set(CMAKE_PREFIX_PATH E:/LIBRERIAS/PCL1.5.1/cmake) до find_package() звонка. - person arrowd; 29.11.2012
comment
Нет, та же ошибка. Должен ли я сначала удалить строки list(APPEND CMAKE_MODULE_PATH "E:/SITEGI/LIBRERIAS/PCL1.5.1/cmake"), set(PCL_ROOT "E:/SITEGI/LIBRERIAS/PCL1.5.1") или set(PCL_DIR "E:/SITEGI/LIBRERIAS/PCL1.5.1/cmake") из файла? - person Adri C.S.; 29.11.2012