如何用VCPKG编译含全点类型的PCL?解决修改后编译报错问题
问题
默认情况下,.\vcpkg\buildtrees\pcl\src\pcl-1.13.1-38090574eb.clean文件夹中的CMakeLists.txt会为MSVC和MINGW定义PCL_ONLY_CORE_POINT_TYPES,但我需要编译支持所有点类型的PCL。我尝试注释掉该定义的代码行:
add_definitions("-DBOOST_ALL_NO_LIB -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS -DNOMINMAX ${SSE_DEFINITIONS}") #add_definitions("-DBOOST_ALL_NO_LIB -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS -DNOMINMAX -DPCL_ONLY_CORE_POINT_TYPES ${SSE_DEFINITIONS}")
然后使用--editable选项运行VCPKG命令:
.\vcpkg install pcl[vtk]:x64-windows --featurepackages --recurse --editable pcl
但出现了如下编译错误:
-- Configuring x64-windows -- Building x64-windows-dbg CMake Error at scripts/cmake/vcpkg_execute_build_process.cmake:134 (message): Command failed: C:/dev/vcpkg/downloads/tools/cmake-3.27.1-windows/cmake-3.27.1-windows-i386/bin/cmake.exe --build . --config Debug --target install -- -v -j17 Working Directory: C:/dev/vcpkg/buildtrees/pcl/x64-windows-dbg See logs for more information: C:\dev\vcpkg\buildtrees\pcl\install-x64-windows-dbg-out.log Call Stack (most recent call first): installed/x64-windows/share/vcpkg-cmake/vcpkg_cmake_build.cmake:74 (vcpkg_execute_build_process) installed/x64-windows/share/vcpkg-cmake/vcpkg_cmake_install.cmake:16 (vcpkg_cmake_build) ports/pcl/portfile.cmake:74 (vcpkg_cmake_install) scripts/ports.cmake:168 (include)
解决方法
- 不要直接修改buildtrees临时目录源码:
buildtrees是vcpkg的临时构建目录,修改后的内容可能被覆盖,还会导致构建状态不一致。正确的做法是修改ports/pcl下的portfile.cmake或添加补丁文件。 - 通过portfile传递编译参数:
打开.\vcpkg\ports\pcl\portfile.cmake,找到vcpkg_cmake_configure的调用块,将-DPCL_ONLY_CORE_POINT_TYPES=OFF添加到OPTIONS列表中,示例如下:vcpkg_cmake_configure( SOURCE_PATH "${SOURCE_PATH}" OPTIONS -DPCL_ONLY_CORE_POINT_TYPES=OFF # 保留原有其他OPTIONS参数 ) - 清理旧构建缓存:删除
buildtrees/pcl和packages/pcl_x64-windows相关目录,避免之前的缓存干扰新构建。 - 重新执行安装命令:无需使用
--editable选项,直接运行:.\vcpkg install pcl[vtk]:x64-windows --featurepackages --recurse - 查看详细日志定位具体错误:如果仍报错,打开
C:\dev\vcpkg\buildtrees\pcl\install-x64-windows-dbg-out.log,日志里会有具体的编译错误信息(比如依赖缺失、代码语法问题等),根据实际错误针对性修复。
内容的提问来源于stack exchange,提问作者TheHoff
相关产品推荐
相关产品推荐

