Visual Studio 2022+CMake配置PCL1.14.1

前言

本教程只是提供高效的PCL配置流程,不提供Qt环境配置,如果需要GUI界面,则需要自寻查找Cmake配置QT的教程。请相信,在CMake之下没有任何事是困难的,最困难的工作已经由前辈们完成。因此,对于C++用户来说学习CMake是极其重要的。

一,下载PCL

选择下图框选文件即可。PCL-1.14.1下载链接

二,安装PCL

除了下图选择第二个选项,其余步骤直接选择"下一步"即可,然后等待安装完成。如果想手动添加环境变量,也可全部选择默认选项。

安装完成,电脑系统环境变量中会看到如下变量,如果红框中的变量不存在,则需要手动创建或者直接重新安装。

接下来,双击Path的值进行查看,安装完成通常只会有红框1中的路径,绿框2中的路径需要手动添加,也就是上图的OPENNI2_INCLUDE64,OPENNI2_LIB64和OPENNI2_REDIST64。如果没有在Path里添加这三个变量,运行时就会报找不到OpenNI2.dll的错误,并且将OpenNI2.dll复制到执行目录也是无效的。

注意:配置完Path必须重启Visual Studio,否则VS会使用缓存的环境变量,导致你觉得更改没有生效而陷入无尽的自我怀疑当中。 如果你知道如何清理VS缓存,也可以忽略操作。

三,配置CMakelists.txt

VS2022默认的CMake工程如下图蓝色框所示,打开CMakeLists.txt,将红框中的内容复制过去即可。保存后即可正常使用PCL的头文件。如果使用#include找不到pcl就说明配置有问题,可以检查控制台CMake日志(第二图)。

cpp 复制代码
//CMakeLists.txt

cmake_minimum_required (VERSION 3.8 )

if (POLICY CMP0141)
  cmake_policy(SET CMP0141 NEW)
  set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>")
endif()

project ("PclTest" )

find_package(PCL REQUIRED)

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

add_executable (${PROJECT_NAME} "PclTest.cpp" "PclTest.h")

target_link_libraries(${PROJECT_NAME} ${PCL_LIBRARIES})

if (CMAKE_VERSION VERSION_GREATER 3.12)
  set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 20)
endif()

四,运行示例

运行下列代码,如果能看到一个矩形点阵,就说明配置你已经成功了。

cpp 复制代码
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>

using namespace std;

int main()
{
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	cloud->resize(1000);
	for (int i = 0;i < 10;++i) {
		for (int j = 0;j < 10;++j) {
			for (int k = 0;k < 10;++k) {
				int index = i * 100 + j * 10 + k;
				cloud->points[index].x = static_cast<float>(i);
				cloud->points[index].y = static_cast<float>(j);
				cloud->points[index].z = static_cast<float>(k);
			}
		}
	}
	pcl::visualization::PCLVisualizer viewer("PclTest");
	viewer.addPointCloud(cloud, "cloud");
	viewer.spin();
	return 0;
}
相关推荐
智者知已应修善业2 小时前
【51单片机2个按键控制流水灯运行与暂停】2023-9-6
c++·经验分享·笔记·算法·51单片机
云泽8083 小时前
C++11 核心特性全解:列表初始化、右值引用与移动语义实战
开发语言·c++
AI进化营-智能译站4 小时前
ROS2 C++开发系列12-用多态与虚函数构建可扩展的ROS2机器人行为模块
开发语言·c++·ai·机器人
Morwit4 小时前
QML组件之间的通信方案(暴露子组件)
c++·qt·职场和发展
qeen874 小时前
【数据结构】建堆的时间复杂度讨论与TOP-K问题
c语言·数据结构·c++·学习·
图码4 小时前
如何用多种方法判断字符串是否为回文?
开发语言·数据结构·c++·算法·阿里云·线性回归·数字雕刻
handler015 小时前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
zhouwy1135 小时前
Linux进程与线程编程详解
linux·c++
独隅5 小时前
Visual Studio 2026 详细安装教程和配置指南
ide·visual studio
A7bert7776 小时前
【YOLOv8pose部署至RDK X5】模型训练→转换bin→Sunrise 5部署
c++·python·深度学习·yolo·目标检测