PCL学习笔记->基本用法3(在你的项目中使用PCL)

在自己的项目中使用PCL

本教程说明了如何在自己的项目中使用PCL。

先决条件

我们假设您已经在计算机上下载,编译并安装了PCL。

项目设定

假设该项目位于/PATH/TO/MY/GRAND/PROJECT下,其中包含一个孤独的cpp文件名pcd_write.cpp(将其从Write Point Cloud数据复制 到PCD文件教程)。在同一文件夹中,创建一个名为CMakeLists.txt的文件,其中包含:

cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
project(MY_GRAND_PROJECT)
find_package(PCL 1.3 REQUIRED COMPONENTS common io)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable(pcd_write_test pcd_write.cpp)
target_link_libraries(pcd_write_test ${PCL_LIBRARIES})

说明

现在,让我们看看我们做了什么。

cmake_minimum_required(VERSION 2.6 FATAL_ERROR)

这对于cmake是必不可少的,并且由于我们正在做非常基础的项目,因此我们不需要cmake 2.8或更高版本的功能。

project(MY_GRAND_PROJECT)

该行为您的项目命名,并设置一些有用的cmake变量,例如引用源目录(MY_GRAND_PROJECT_SOURCE_DIR)和要从其中调用cmake的目录(MY_GRAND_PROJECT_BINARY_DIR)。

find_package(PCL 1.3 REQUIRED COMPONENTS common io)

我们要求找到最低版本为1.3的PCL软件包。我们还说,这REQUIRED意味着如果找不到cmake,它将正常地失败。由于PCL是模块化的,因此可以要求:

  • 仅一个组件:find_package(PCL 1.3必需组件io)

  • 几个:find_package(PCL 1.3必需组件io通用)

  • 所有现有的:find_package(需要PCL 1.3)

include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

找到PCL后,将设置几个相关变量:

  • PCL_FOUND:如果找到PCL,则设置为1,否则未设置

  • PCL_INCLUDE_DIRS:设置为PCL安装的标头和依赖标头的路径

  • PCL_LIBRARIES:设置为已建立和已安装的PCL库的文件名

  • PCL_LIBRARY_DIRS:设置为PCL库和第三方依赖关系所在的路径

  • PCL_VERSION:找到的PCL的版本

  • PCL_COMPONENTS:列出所有可用的组件

  • PCL_DEFINITIONS:列出所需的预处理程序定义和编译器标志

为了让cmake知道项目中包含的外部标头,需要使用include_directories()宏。在我们的案例中 PCL_INCLUDE_DIRS,正是我们需要的,因此我们要求cmake在其中包含的路径中搜索可能包含的标头。

add_executable(pcd_write_test pcd_write.cpp)

在这里,我们告诉cmake我们正在尝试pcd_write_test从一个源文件中创建一个可执行文件 pcd_write.cpp。CMake将处理后缀(.exe在Windows平台上,在UNIX上为空白)和权限。

target_link_libraries(pcd_write_test ${PCL_LIBRARIES})

我们正在构建的可执行文件可以调用PCL函数。到目前为止,我们仅包括PCL头文件,因此编译器知道我们正在调用的方法。我们还需要使链接程序知道我们要链接的库。如前所述,PCL发现的库是使用PCL_LIBRARIES变量引用的,剩下的只是触发我们调用target_link_libraries()宏的链接操作 。PCLConfig.cmake使用一个名为EXPORT的CMake特殊功能,该功能允许您使用其他项目目标,就像您自己构建它们一样。使用此类目标时,它们称为导入目标,其作用与其他任何目标一样。

编译并运行项目

使用命令行CMake

创建一个名为的目录build,在其中进行编译。做:

$ cd /PATH/TO/MY/GRAND/PROJECT
$ mkdir build
$ cd build
$ cmake ..

您将看到类似于以下内容:

-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Found PCL_IO: /usr/local/lib/libpcl_io.so
-- Found PCL: /usr/local/lib/libpcl_io.so (Required is at least version "1.0")
-- Configuring done
-- Generating done
-- Build files have been written to: /PATH/TO/MY/GRAND/PROJECT/build

如果要查看在CMake缓存上写的内容:

CMAKE_BUILD_TYPE
CMAKE_INSTALL_PREFIX             /usr/local
PCL_DIR                          /usr/local/share/pcl

现在,我们可以构建我们的项目,只需键入:

$ make

结果应如下:

Scanning dependencies of target pcd_write_test
[100%] Building CXX object
CMakeFiles/pcd_write_test.dir/pcd_write.cpp.o
Linking CXX executable pcd_write_test
[100%] Built target pcd_write_test

现在,该项目已编译,链接并可以进行测试:

$ ./pcd_write_test

这导致:

Saved 5 data points to test_pcd.pcd.
  0.352222 -0.151883 -0.106395
  -0.397406 -0.473106 0.292602
  -0.731898 0.667105 0.441304
  -0.734766 0.854581 -0.0361733
  -0.4607 -0.277468 -0.916762

使用CMake gui(例如Windows)

运行CMake GUI,并填写以下字段:

  • Where is the source code :这是包含CMakeLists.txt文件和源的文件夹。

  • Where to build the binaries :这是生成Visual Studio项目文件的位置

然后,单击Configure。系统将提示您输入生成器/编译器。然后点击Generate 按钮。如果没有错误,项目文件将生成到该 文件夹中。Where to build the binaries

打开sln文件,然后构建您的项目!

奇怪的装置

CMake有一个默认可搜索路径的列表,在其中查找FindXXX.cmake或XXXConfig.cmake。如果您碰巧安装在一些不明显的存储库中(让我们在“邪恶文档”中说),则可以帮助cmake查找PCLConfig.cmake添加以下行:

set(PCL_DIR "/path/to/PCLConfig.cmake")

在此之前:

find_package(PCL 1.3 REQUIRED COMPONENTS common io)
  ...

你可能感兴趣的:(PCL)