【问题标题】:Cannot compile pcl examples with cmake无法使用 cmake 编译 pcl 示例
【发布时间】:2014-04-23 01:54:13
【问题描述】:

我刚刚安装了 pcl,想运行文件夹 /pcl-pcl-1.7.1/examples 中的示例。每个不同的例子都有 CMakeLists.txt ,所以我想我只是做一个 cmake 。在终端后跟 make 编译它。 在终端中这样做之后,我得到了

CMakeLists.txt 中的 CMake 警告(开发): 不存在 cmake_minimum_required 命令。一行代码如

cmake_minimum_required(VERSION 2.8)

所以我查看了 cmake 文件,奇怪的是这些 cmake 文件没有正常的 cmake 布局;从 cmake_minimum_required(VERSION 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文件有什么不同?

【问题讨论】:

  • 我的猜测 - make pcl_example_difference_of_normals.

标签: compilation cmake point-cloud-library


【解决方案1】:

CMake 允许将构建拆分为多个不同的 CMakeLists.txt 文件,这些文件不一定必须单独工作。

在您的情况下,该项目可能使用CMakeLists.txt 中的add_subdirectory pcl-pcl-1.7.1 来包含examples 中的那个。 examples 中的 CMakeLists.txt 不完整,它不能单独运行,只能在作为顶级 CMake 文件的一部分包含时运行。

你现在有两个选择:

  • 使用修改后的顶级CMakeLists.txt 包含来自examples 的那个。实现这一点的最简单方法可能是从 pcl 附带的顶级文件开始,并丢弃您不需要的所有内容。根据该文件中存在的 CMake-voodoo 数量,您可能需要进行大量操作才能使其正常工作。
  • 按照 cmets 中 @arrowdodger 的建议,只需在顶级目录中运行完整的 CMake 配置,然后选择性地仅编译您感兴趣的目标。如果您使用的是 Makefile 生成器,您只需给出命令行上请求的目标的名称(可能编写一个 shell 脚本,这样您就不必全部记住它们)。大多数 IDE 还应该只允许在项目中构建目标的子集。

【讨论】:

    【解决方案2】:

    您可以通过两种方式编译示例。

    1) 更改 CMakeLists.txt,取消注释行

    ### ---[设置示例

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

    2) 如果您已经构建过一次 pcl,只需转到构建目录中的 CMakeCache.txt 文件并进行以下更改。

    BUILD_examples:BOOL=ON

    那就做吧

    make
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多