【PCL】(二)CMake编译

(二)编译

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


 #include <iostream>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h>intmain (){pcl::PointCloud<pcl::PointXYZ> cloud;// Fill in the cloud datacloud.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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/463.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言编程—内存管理

C语言中的动态内存管理。C语言为内存的分配和管理提供了几个函数。这些函数可以在 <stdlib.h> 头文件中找到。 在C语言中&#xff0c;内存是通过指针变量来管理的。指针是一个变量&#xff0c;它存储了一个内存地址&#xff0c;这个内存地址可以指向任何数据类型的变量&…

【C语言】手把手带你解决青蛙跳台阶问题

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,这里是君兮_&#xff0c;今天更新的是经典递归问题——青蛙跳台阶&#xff0c;在所有有关递归的问题中&#xff0c;青蛙跳台阶是最广为人知的问题之一&#xff0c;可以说&#xff0c;如果你能真正弄懂青蛙跳台阶问…

生产者与消费者问题

本篇文章我们使用C探讨一下生产者与消费者问题. 1. 多线程的引入 我们学习了操作系统, 知道了进程和线程的概念, 但是如果不进行代码实战的话, 会很难理解它们. 特别是编程的初学者(比如我), 在了解了进程和线程后通常会感到疑惑: 多线程怎么用? 为啥我平时写代码没有使用到…

Mybatis源码分析_解析大流程梳理_解析配置文件 (3)

学习mybatis&#xff0c;绕不开一个核心类 Configuration。这个类相当于一个小型数据库&#xff0c;把mybatis里面所有的配置信息基本全部给存储起来了。 package org.apache.ibatis.session;import java.util.Arrays; import java.util.Collection; import java.util.HashMap;…

Vue3+VueCli+TS官方模板简析

使用脚手架安装相关依赖 使用vueCli 安装预设的vuextslessrouter ## 查看vue/cli版本&#xff0c;确保vue/cli版本在4.5.0以上 vue --version## 安装或者升级你的vue/cli npm install -g vue/cli## 创建 vue create vue3_cli_ts_htgl //create vue3_cli_ts_htgl为自…

ELFK日志分析系统并使用Filter对日志数据进行处理

系列文章目录 文章目录 系列文章目录一、FilebeatELK1.FilebeatELK 部署2.Filebeat 节点上操作 二、Filter1.内置正则表达式调用 总结 一、FilebeatELK 1.FilebeatELK 部署 Node1节点&#xff08;2C/4G&#xff09;&#xff1a;node1/192.168.169.10 Elasticsearch Node2节点…

深入浅出之Docker Compose详解

目录 1.Docker Compose概述 1.1 Docker Compose 定义 1.2 Docker Compose产生背景 1.3 Docker Compose 核心概念 1.4 Docker Compose 使用步骤 1.5 Docker Compose 常用命令 2. Docker Compose 实战 2.1 Docker Compose下载和卸载 2.2 Docker Compose 项目概述 2.3 Do…

从0到1搭建spring cloud alibaba +springboot+nacos+dubbo微服务

版本关系&#xff1a; spring cloud alibaba各组件对应关系 创建父工程&#xff0c;pom.xml配置如下&#xff1a; 由以上版本对应关系&#xff1a; springboot版本&#xff1a;2.3.2.RELEASE spring cloud 版本选择&#xff1a;Hoxton.SR9 spring cloud alibaba版本选择&#…

Elasticsearch:增量快照如何工作?

作者&#xff1a;Lutf ur Rehman Elastic 提供许多由讲师指导的面对面和虚拟现场培训以及点播培训。 我们的旗舰课程是 Elasticsearch 工程师、Kibana 数据分析和 Elastic 可观测性工程师。 所有这些课程都会获得认证。如果你想更多了解这些认证方面的知识&#xff0c;请阅读文…

5-NumPy如何创建N维数组?【视频版】

目录 问题视频解答 问题 视频解答 点击观看&#xff1a; 5-如何创建等N维数组&#xff1f;

大佬详细讲解:银行核心项目之测试阶段

最近有小伙伴留言说「想了解核心系统建设中&#xff0c;冒烟、SIT、UAT、回归测试的重点&#xff0c;如何设计测试案例&#xff0c;或相关的资料推荐等」。 这个话题很笼统&#xff0c;测试这一块儿除了业务测试&#xff0c;还有性能测试、安全测试等&#xff1b;以及不同的角…

本地Linux 部署 Dashy 并远程访问

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 转载自cpolar极点云文章&#xff1a;本地Linux 部署 Dashy 并远程访问 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你…