00-1.CloudCompare2.13.2源码编译(Window平台)

00.CloudCompare2.13.2源码编译(Window平台)

说明:本人浅浅学习了C++的一些内容,近期在学习CMake,想要结合开源程序巩固基础,同时在工作中常用一个叫CloudCompare的开源点云处理软件,因此希望阅读该软件源码以加深自己对于编程的理解。由于本人第一次接手如此大项目,而且又是一名编程新手,文中难免有许多疏漏错误,望见谅。

1.CloudCompare源码下载

1.1方法一:Git下载

git clone --recursive https://github.com/CloudCompare/CloudCompare.git 

注:项目中包含一些子模块,--recursive能将它们同时下载。如果不添加,则CCCoreLib文件夹下会是空的。参考文章

1.2方法二:自行下载压缩包

解压上述所有压缩包,记CloudCompare项目目录为%ProjectPath%,需要修改的内容如下:

  • CCCoreLib文件夹中所有内容复制到%ProjectPath%\libs\qCC_db\extern\CCCoreLib文件夹下
  • nanoflann文件夹中所有内容复制到%ProjectPath%\libs\qCC_db\extern\CCCoreLib\extern\nanoflann文件夹下
  • 如果下载的nanoflann版本为1.6或以上(其余版本未测试,如果后续出现问题可再做修改),修改"%ProjectPath%\libs\qCC_db\extern\CCCoreLib\src\Kriging.cpp文件第358行(CCCoreLib版本v2024.04.10),nanoflann::SearchParams → \to nanoflann::SearchParameters
    图中为310行是因为vs code自动格式化代码,导致缩进不同

图中为310行是因为vs code自动格式化代码,导致缩进不同

推测为该静态变量命名发生了改变,但CloudCompare中并未修改。当然,也可以暂时不修改,等到后续构建时由编译器提供修改建议。

2.编译运行程序

参考文章:CloudCompare 最新版编译与运行(全网最详细)

注:本人仅进行最小限度的编译,使用默认的CMake选项,忽略各种外部库的编译

2.1编译环境说明

Windows64需要准备的编译环境:

  • CMake(最低版本为3.10)
  • Qt(5.12 <= Qt < 6.0)
  • VS(2019或2022,安装C++开发环境)

注意:需要将CMake和Qt的/bin文件夹添加到环境变量中(添加后最好重启电脑一次)

在这里插入图片描述

2.2CMake构建项目

  • 在CloudCompare源文件目录下面新建两个文件夹buildprefix
    在这里插入图片描述

  • 打开cmake-gui,在Where is the source code一栏选择源码文件夹,在Where to build the binaries一栏选择源码路径下的build文件夹;

  • 点击Configure,使用默认配置即可,刷新CMake选项,此时中间会显示一些选项;

  • 修改QT5_ROOT_PATH为Qt5的根目录; 在这里插入图片描述

  • 修改CMAKE_INSTALL-PREFIX路径为%ProjectPath%/prefix在这里插入图片描述

  • 再次点击Configure,然后点击Generate,当显示出如下信息时,表示构建完成。在这里插入图片描述

2.3VS2022生成项目

  • 进入%ProjectPath%/build文件夹下,使用VS打开CloudCompareProjects.sln
  • 右键ALL_BUILD,选择“重新生成”,等待生成完成,出现如下错误:在这里插入图片描述
  • 忽略上述错误,右键INSTALL,选择“重新生成”,等待生成完成;
  • 进入%ProjectPath%/prefix/CloudCompare_debug文件夹,双击CloudCompare.exe,运行成功。在这里插入图片描述

3.VS生成过程错误解决(仅个人情况)

如何查看setlocal错误的配置?
右键项目 → \to 属性 → \to 生成事件 → \to 生成后事件(本次错误事件)

生成错误出现后,使用VS调试代码的想法就无法实现

CloudCompare项目

setlocal
"D:\Program Files\CMake\bin\cmake.exe" -E remove_directory D:/Qt/CC/CloudCompare/build/qCC/Debug/deployqt
if %errorlevel% neq 0 goto :cmEnd
"D:\Program Files\CMake\bin\cmake.exe" -E make_directory D:/Qt/CC/CloudCompare/build/qCC/Debug/deployqt
if %errorlevel% neq 0 goto :cmEnd
"D:\Program Files\CMake\bin\cmake.exe" -E copy D:/Qt/CC/CloudCompare/build/qCC/Debug/CloudCompare.exe D:/Qt/CC/CloudCompare/build/qCC/Debug/deployqt/CloudCompare.exe
if %errorlevel% neq 0 goto :cmEnd
D:\Software\Qt\5.15.2\msvc2019_64\bin\windeployqt.exe D:/Qt/CC/CloudCompare/build/qCC/Debug/deployqt/CloudCompare.exe --no-compiler-runtime --no-angle --no-opengl-sw --no-quick-import --no-system-d3d-compiler --concurrent --verbose=1 --gamepad
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd

ccViewer项目

setlocal
"D:\Program Files\CMake\bin\cmake.exe" -E remove_directory D:/Qt/CC/CloudCompare/build/ccViewer/Debug/deployqt
if %errorlevel% neq 0 goto :cmEnd
"D:\Program Files\CMake\bin\cmake.exe" -E make_directory D:/Qt/CC/CloudCompare/build/ccViewer/Debug/deployqt
if %errorlevel% neq 0 goto :cmEnd
"D:\Program Files\CMake\bin\cmake.exe" -E copy D:/Qt/CC/CloudCompare/build/ccViewer/Debug/ccViewer.exe D:/Qt/CC/CloudCompare/build/ccViewer/Debug/deployqt/ccViewer.exe
if %errorlevel% neq 0 goto :cmEnd
D:\Software\Qt\5.15.2\msvc2019_64\bin\windeployqt.exe D:/Qt/CC/CloudCompare/build/ccViewer/Debug/deployqt/ccViewer.exe --no-compiler-runtime --no-angle --no-opengl-sw --no-quick-import --no-system-d3d-compiler --concurrent --verbose=1 --gamepad
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd

可以看到,该命令无非就是删除和拷贝构建qt项目所需的文件,那为什么会报错呢?将其写为一个bat脚本,添加pause命令后运行,产生错误:

在这里插入图片描述

???我不是Qt5吗?你怎么找到Qt6去了?

解决方法:编辑环境变量Path,保证Qt5在Qt6上面就好

在这里插入图片描述

修改环境变量后,重启VS,再次生成项目,无报错。

在这里插入图片描述

  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值