【PCL】(二)CMake编译

(二)CMake编译

CMake入门

将以下代码写到pcd_write.cpp中,并放到项目/PATH/TO/MY/GRAND/PROJECT/project中。


 #include <iostream>
 #include <pcl/io/pcd_io.h>
 #include <pcl/point_types.h>
 
 int main ()
 {
   pcl::PointCloud<pcl::PointXYZ> cloud;

  // Fill in the cloud data
  cloud.width    = 5;
  cloud.height   = 1;
  cloud.is_dense = false;
  cloud.resize (cloud.width * cloud.height);

  for (auto& point: cloud)
  {
    point.x = 1024 * rand () / (RAND_MAX + 1.0f);
    point.y = 1024 * rand () / (RAND_MAX + 1.0f);
    point.z = 1024 * rand () / (RAND_MAX + 1.0f);
  }

  pcl::io::savePCDFileASCII ("test_pcd.pcd", cloud);
  std::cerr << "Saved " << cloud.size () << " data points to test_pcd.pcd." << std::endl;

  for (const auto& point: cloud)
    std::cerr << "    " << point.x << " " << point.y << " " << point.z << std::endl;

  return (0);
}

该代码实现了将随机生成的点云写出到test_pcd.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是模块化的,因此可以选择性地请求部分模块,例如:

  • 请求io一个模块: find_package(PCL 1.3 REQUIRED COMPONENTS io)

  • 请求io common两个模块: find_package(PCL 1.3 REQUIRED COMPONENTS io common)

  • 请求所有模块: find_package(PCL 1.3 REQUIRED)

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.cpp生成一个名为pcd_write_test的可执行文件。cmake将负责后缀(在Windows平台上为.exe,在UNIX上无后缀)和权限。

target_link_libraries(pcd_write_test ${PCL_LIBRARIES})

我们正在构建的可执行文件对PCL函数进行调用。到目前为止,我们只包含了PCL头,以便编译器了解我们正在调用的方法。我们还需要让链接器知道我们链接的库。如前所述,PCL发现的库是使用PCL_libraries变量引用的,剩下的就是触发链接操作,我们调用target_link_libraries()宏来执行该操作。PCLConfig.cmake使用一个名为EXPORT的cmake特殊功能,该功能允许使用他人的项目目标,就像你自己构建它们一样。当你使用这些目标时,它们被称为导入目标,其作用与任何其他目标一样。

Compiling and running the project

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

cd /YourPath/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

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

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

参考:
https://pcl.readthedocs.io/projects/tutorials/en/master/using_pcl_pcl_config.html#using-pcl-pcl-config

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二进制人工智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值