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自动格式化代码,导致缩进不同
推测为该静态变量命名发生了改变,但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源文件目录下面新建两个文件夹
build
和prefix
:
-
打开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,再次生成项目,无报错。