Не удается скомпилировать примеры pcl с помощью cmake

Я только что установил pcl и хотел бы запустить примеры в папке /pcl-pcl-1.7.1/examples. В каждом из разных примеров есть CMakeLists.txt, поэтому я подумал, что просто делаю cmake . в терминале, а затем make для его компиляции. После этого в терминале я получил

Предупреждение CMake (dev) в CMakeLists.txt: отсутствует команда cmake_minimum_required. Строка кода, например

cmake_minimum_required(VERSION 2.8)

Итак, я просмотрел файл cmake, и странно то, что эти файлы cmake не имеют нормального макета cmake; который начинается с cmake_minimum_required (ВЕРСИЯ 2.8 FATAL_ERROR), а затем еще что-то. Файл CMakeLists.txt, который я просмотрел, выглядел так:

PCL_ADD_EXAMPLE(pcl_example_fast_point_feature_histograms FILES example_fast_point_feature_histograms.cpp
                LINK_WITH pcl_common pcl_kdtree pcl_search pcl_features pcl_io)

PCL_ADD_EXAMPLE(pcl_example_normal_estimation FILES example_normal_estimation.cpp
                LINK_WITH pcl_common pcl_kdtree pcl_search pcl_features pcl_io)

PCL_ADD_EXAMPLE(pcl_example_point_feature_histograms FILES example_point_feature_histograms.cpp
                LINK_WITH pcl_common pcl_kdtree pcl_search pcl_features pcl_io)

PCL_ADD_EXAMPLE(pcl_example_principal_curvatures_estimation FILES example_principal_curvatures_estimation.cpp
                LINK_WITH pcl_common pcl_kdtree pcl_search pcl_features pcl_io)

PCL_ADD_EXAMPLE(pcl_example_shape_contexts FILES example_shape_contexts.cpp
LINK_WITH pcl_common pcl_kdtree pcl_search pcl_features pcl_io)

PCL_ADD_EXAMPLE(pcl_example_spin_images FILES example_spin_images.cpp
                LINK_WITH pcl_common pcl_kdtree pcl_search pcl_features pcl_io)

PCL_ADD_EXAMPLE(pcl_example_rift_estimation FILES example_rift_estimation.cpp
                LINK_WITH pcl_common pcl_kdtree pcl_search pcl_features pcl_io)

PCL_ADD_EXAMPLE(pcl_example_difference_of_normals FILES example_difference_of_normals.cpp
                LINK_WITH pcl_common pcl_kdtree pcl_search pcl_features pcl_io pcl_segmentation pcl_sample_consensus)

Я не очень много знаю о cmake, но я знаю, что он начинается с определения вещей. Итак, мой вопрос: как мне теперь скомпилировать эти примеры pcl? Или в файле cmake есть что-то другое?


person user3379159    schedule 17.03.2014    source источник
comment
Мое предположение - make pcl_example_difference_of_normals.   -  person arrowd    schedule 17.03.2014


Ответы (2)


CMake позволяет разделить сборку на несколько отдельных CMakeLists.txt файлов, которые не обязательно должны работать сами по себе.

В вашем случае проект, вероятно, использует add_subdirectory из CMakeLists.txt в pcl-pcl-1.7.1, чтобы включить тот, что в examples. CMakeLists.txt в examples неполный, он не может быть запущен сам по себе, а только тогда, когда он включен как часть файла CMake верхнего уровня.

Теперь у вас есть два варианта:

  • Используйте модифицированный CMakeLists.txt верхнего уровня, чтобы включить его из examples. Самый простой способ добиться этого — начать с файла верхнего уровня, поставляемого с pcl, и выкинуть все, что вам не нужно. В зависимости от количества CMake-voodoo, присутствующего в этом файле, вам, возможно, придется немало повозиться, чтобы заставить его работать.
  • Как предложил @arrowdodger в комментариях, просто запустите полную настройку CMake в каталоге верхнего уровня, а затем выборочно скомпилируйте только те цели, которые вас интересуют. Если вы используете генератор Makefile, вы можете просто указать имена запрошенные цели в командной строке (возможно, напишите сценарий оболочки, чтобы вам не приходилось запоминать их все). Большинство IDE также должны позволять создавать только подмножество целей в проекте.
person ComicSansMS    schedule 19.03.2014

Есть два способа компилировать примеры.

1) изменить CMakeLists.txt, раскомментировать строку

### ---[ Настроить для примера

include("${PCL_SOURCE_DIR}/cmake/pcl_examples.cmake")

2) если вы уже собирали pcl один раз, просто перейдите в файл CMakeCache.txt в каталоге сборки и выполните указанные ниже изменения.

BUILD_examples:BOOL=ВКЛ

тогда просто сделай

make
person Abhishek Sharma    schedule 14.09.2016