将 Open3D(C++) 加入到 Vcpkg 包管理中(Windows)

由于当前的 vcpkg 还未增加对 open3d 包的管理支持,也就是使用 vcpkg install open3d 无效,因此本人尝试将 open3d 官方已经编译好的源码直接移植到 vcpkg 中。

1. 下载 open3d 已经编译好的源码在这里插入图片描述

官网同时下载 Release 版和 Debug 版。

2. 移植 Release 包

在这里插入图片描述

解压 Release 包后,将 bin、include、lib 文件夹中的文件对应拷贝到 vcpkg(installed/x64-windows) 中。

3. 移植 Debug 包

在这里插入图片描述

解压 Debug 包后,将 bin、lib 文件夹中的文件对应拷贝到 vcpkg(installed/x64-windows/debug) 中。

4. 移植 cmake 文件

在这里插入图片描述

在 vcpkg 的 install/x64-windows/share 路径下创建一个名为 open3d 的文件夹,将 Release 包和 Debug 包的 CMake 文件夹中文件按图中方式拷贝到 open3d 文件夹中。
拷贝后的 open3d 文件夹中包含以下文件
    Open3DConfig.cmake
    Open3DConfigVersion.cmake
    Open3DTargets-debug.cmake
    Open3DTargets-release.cmake
    Open3DTargets.cmake

5. 修改 Open3DConfig.cmake 文件

将原本第 6 行的代码
get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../" ABSOLUTE)
修改为
get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../" ABSOLUTE)

6. 修改 Open3DTargets-debug.cmake 文件

将文件中含有 ${_IMPORT_PREFIX} 变量处的后面都加上 /debug 字符,包括 11、12、16行。
修改前
11  IMPORTED_IMPLIB_DEBUG "${_IMPORT_PREFIX}/lib/Open3D.lib"
12  IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/bin/Open3D.dll"
  
16  list(APPEND _cmake_import_check_files_for_Open3D::Open3D "${_IMPORT_PREFIX}/lib/Open3D.lib" "${_IMPORT_PREFIX}/bin/Open3D.dll" )
修改后
11  IMPORTED_IMPLIB_DEBUG "${_IMPORT_PREFIX}/debug/lib/Open3D.lib"
12  IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/debug/bin/Open3D.dll"
  
16  list(APPEND _cmake_import_check_files_for_Open3D::Open3D "${_IMPORT_PREFIX}/debug/lib/Open3D.lib" "${_IMPORT_PREFIX}/debug/bin/Open3D.dll" )

7. 修改 Open3DTargets.cmake 文件

在 51 行后重复增加一句
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
修改前
49	# Compute the installation prefix relative to this file.
50	get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
51	get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
52	
53	if(_IMPORT_PREFIX STREQUAL "/")
54	  set(_IMPORT_PREFIX "")
55	endif()
修改后
49	# Compute the installation prefix relative to this file.
50	get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
51	get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
52	get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
53	
54	if(_IMPORT_PREFIX STREQUAL "/")
55	  set(_IMPORT_PREFIX "")
56	endif()

!!!至此大功告成!!!

使用 cmake 工程进行测试

CMakeList.txt(需要将 CMAKE_TOOLCHAIN_FILE 指定为你自己 vcpkg 的安装路径)
cmake_minimum_required(VERSION 3.0.0)

set( CMAKE_TOOLCHAIN_FILE
    "C:/ProgramData/vcpkg/scripts/buildsystems/vcpkg.cmake"		# 此处需要根据实际安装位置修改
    CACHE STRING
    "Vcpkg toolchain file")

set( CMAKE_BUILD_TYPE
    "Release"
    CACHE STRING
    ""
    FORCE)

project(test VERSION 0.1.0)
add_executable(${PROJECT_NAME})
target_sources(${PROJECT_NAME} PRIVATE main.cpp)

# Open3D
option(STATIC_WINDOWS_RUNTIME  "Use static (MT/MTd) Windows runtime"  ON )
if(STATIC_WINDOWS_RUNTIME)
    set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
else()
    set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
endif()


find_package(Open3D REQUIRED)

target_link_libraries(${PROJECT_NAME} PRIVATE Open3D::Open3D)

get_target_property(open3d_type Open3D::Open3D TYPE)
if(open3d_type STREQUAL "SHARED_LIBRARY")
    message(STATUS "Copying Open3D.dll to ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>")
    add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                        # COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_INSTALL_PREFIX}/bin/Open3D.dll ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>
                        COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_RUNTIME_DLLS:${PROJECT_NAME}> "$<TARGET_FILE_DIR:${PROJECT_NAME}>" COMMAND_EXPAND_LISTS)
endif()
main.cpp
#include <string>
#include "open3d/Open3D.h"

int main(int, char**) {
    std::cout << "Hello, world!\n";

    auto sphere = open3d::geometry::TriangleMesh::CreateSphere(1.0);
    sphere->ComputeVertexNormals();
    sphere->PaintUniformColor({0.0, 1.0, 0.0});
    open3d::visualization::DrawGeometries({sphere});
}
运行结果

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值