VSCode配置PCL1.11.1(CMakeLists.txt)
目录
1,相应环境配置
2,配置生成器
3,测试文件
4,拓展
1,相应环境配置
安装配置PCL:Win11 系统下 VisualStudio2022 配置点云库 PCL1.11.1_pcl1.11.0 vs2022-CSDN博客
安装完成之后记得配置环境变量:
查看是否有如下:
然后双击 系统变量 添加 :
%PCL_ROOT%\3rdParty\FLANN\bin%PCL_ROOT%\3rdParty\Qhull\bin%PCL_ROOT%\3rdParty\OpenNI2\Tools%PCL_ROOT%\3rdParty\VTK\bin %PCL_ROOT%\bin%OPENNI2_REDIST64%
做完之后,重启电脑
新建一个项目:
2,配置生成器
终端输入:
cmake --help
这个带*的就是现在默认的cmake生成器,当然也可以将其替换为MinGW等,按自己需求来
3,测试文件
main.cpp
#include <iostream>
#include <vector>
#include <ctime>
#include <pcl/point_cloud.h>
#include <pcl/octree/octree.h>
#include <boost/thread/thread.hpp>
#include <pcl/visualization/pcl_visualizer.h>
using namespace std;
int
main(int argc, char** argv)
{srand((unsigned int)time(NULL));pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);// 创建点云数据cloud->width = 1000;cloud->height = 1;cloud->points.resize(cloud->width * cloud->height);for (size_t i = 0; i < cloud->points.size(); ++i){cloud->points[i].x = 1024.0f * rand() / (RAND_MAX + 1.0f);cloud->points[i].y = 1024.0f * rand() / (RAND_MAX + 1.0f);cloud->points[i].z = 1024.0f * rand() / (RAND_MAX + 1.0f);}pcl::octree::OctreePointCloudSearch<pcl::PointXYZ> octree(0.1);octree.setInputCloud(cloud);octree.addPointsFromInputCloud();pcl::PointXYZ searchPoint;searchPoint.x = 1024.0f * rand() / (RAND_MAX + 1.0f);searchPoint.y = 1024.0f * rand() / (RAND_MAX + 1.0f);searchPoint.z = 1024.0f * rand() / (RAND_MAX + 1.0f);//半径内近邻搜索vector<int>pointIdxRadiusSearch;vector<float>pointRadiusSquaredDistance;float radius = 256.0f * rand() / (RAND_MAX + 1.0f);cout << "Neighbors within radius search at (" << searchPoint.x<< " " << searchPoint.y<< " " << searchPoint.z<< ") with radius=" << radius << endl;if (octree.radiusSearch(searchPoint, radius, pointIdxRadiusSearch, pointRadiusSquaredDistance) > 0){for (size_t i = 0; i < pointIdxRadiusSearch.size(); ++i)cout << " " << cloud->points[pointIdxRadiusSearch[i]].x<< " " << cloud->points[pointIdxRadiusSearch[i]].y<< " " << cloud->points[pointIdxRadiusSearch[i]].z<< " (squared distance: " << pointRadiusSquaredDistance[i] << ")" << endl;}// 初始化点云可视化对象boost::shared_ptr<pcl::visualization::PCLVisualizer>viewer(new pcl::visualization::PCLVisualizer("显示点云"));viewer->setBackgroundColor(0, 0, 0); //设置背景颜色为黑色// 对点云着色可视化 (red).pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>target_color(cloud, 255, 0, 0);viewer->addPointCloud<pcl::PointXYZ>(cloud, target_color, "target cloud");viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "target cloud");// 等待直到可视化窗口关闭while (!viewer->wasStopped()){viewer->spinOnce(100);boost::this_thread::sleep(boost::posix_time::microseconds(1000));}return (0);
}
CMakeLists.txt
把里面的路径替换为自己的PCL安装路径
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
project(main)# 设置C++标准
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)# 统一使用动态运行时库
if(MSVC)set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD")set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd")
endif()# 设置PCL路径
set(PCL_DIR "E:/PCL 1.11.1/cmake")# 查找PCL
find_package(PCL 1.11.1 REQUIRED COMPONENTS common octree visualization)# 查找Boost
find_package(Boost REQUIRED COMPONENTS thread system)# 设置包含目录
include_directories(${PCL_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS})# 添加可执行文件
add_executable(${PROJECT_NAME} main.cpp)# 链接PCL和Boost库
target_link_libraries(${PROJECT_NAME} ${PCL_LIBRARIES} ${Boost_LIBRARIES})# 添加Windows系统库
if(WIN32)target_link_libraries(${PROJECT_NAME}ws2_32winmmuser32kernel32)# 添加库目录link_directories("E:/PCL 1.11.1/lib")link_directories("E:/PCL 1.11.1/3rdParty/Boost/lib")
endif()# 添加编译定义
target_compile_definitions(${PROJECT_NAME} PRIVATE ${PCL_DEFINITIONS})
终端输入:
mkdir build
cd .\build\
cmake ..
这里说明一下cmake .. 的作用:
CMake 是一个跨平台的构建系统生成工具,它本身不直接编译代码,而是根据你写的
CMakeLists.txt
脚本,生成对应平台的构建文件:
- 在 Linux /macOS 上,默认生成 Makefile
- 在 Windows + Visual Studio 上,默认生成 .sln 和 .vcxproj 工程文件
- 在 Windows + MinGW 上,也会生成 Makefile
- 也可以指定生成器,比如 Ninja、Xcode 等
所以我们这里的生成器就是 Windows + Visual Studio 也就是MSBuild
然后执行生成可执行文件:
cmake --build . --config release
cd 到release下,执行./main
4,拓展
上面cmake .. 操作,也可以直接在cmd命令后的命令行里直接执行,
然后在生成的build文件夹下,双击main.sln
右击main设置为启动项目
生成解决方案
也是在release文件夹下生成可执行文件 main.exe
点击开始执行: