You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何整合CMake与含NuGet包的VS C++项目并调用ONNX/OpenCV?

CMake项目集成NuGet包及相关整合方案

一、给CMake项目添加NuGet包的可行方案

1. 命令行下载+CMake手动配置(跨平台通用)

利用NuGet命令行工具下载包,再在CMakeLists中手动指定头文件和库路径:

# 示例:安装ONNX Runtime NuGet包
execute_process(
    COMMAND nuget install Microsoft.ML.OnnxRuntime -Version 1.16.3 -OutputDirectory ${CMAKE_BINARY_DIR}/nuget_packages
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
    RESULT_VARIABLE NUGET_INSTALL_RESULT
)
if(NOT NUGET_INSTALL_RESULT EQUAL 0)
    message(FATAL_ERROR "Failed to install ONNX Runtime NuGet package")
endif()

# 查找头文件
find_path(ONNXRUNTIME_INCLUDE_DIR NAMES onnxruntime_cxx_api.h
    PATHS ${CMAKE_BINARY_DIR}/nuget_packages/Microsoft.ML.OnnxRuntime.*/build/native/include
)
# 查找链接库(匹配当前平台和构建类型)
find_library(ONNXRUNTIME_LIBRARY NAMES onnxruntime.lib
    PATHS ${CMAKE_BINARY_DIR}/nuget_packages/Microsoft.ML.OnnxRuntime.*/build/native/lib/${CMAKE_VS_PLATFORM_NAME}/${CMAKE_BUILD_TYPE}
)

# 关联到目标项目
target_include_directories(your_target_project PRIVATE ${ONNXRUNTIME_INCLUDE_DIR})
target_link_libraries(your_target_project PRIVATE ${ONNXRUNTIME_LIBRARY})

注意:需确保系统已安装NuGet命令行工具,跨平台时要调整库路径的平台判断逻辑。

2. Visual Studio集成方式(仅VS环境)

如果用Visual Studio打开CMake项目,右键点击项目 → 管理NuGet程序包,直接搜索安装所需的ONNX、OpenCV包。VS会自动生成PackageReference或packages.config,CMake 3.21+版本可自动识别这些依赖,无需手动配置路径。

二、直接解压NuGet包使用.dll/.lib的可行性

完全可行。NuGet包本质是ZIP压缩文件,解压后通常在build/native目录包含头文件、静态库/动态库,runtimes目录分平台存放运行时.dll。

  • 操作步骤:手动解压包到项目指定目录,在CMakeLists中直接指定头文件目录和库文件路径,和普通第三方库一样处理。
  • 注意事项:要匹配项目的平台架构(x86/x64/ARM)和构建类型(Debug/Release),部分包的Debug库会带d后缀(如opencv_world480d.lib);运行时需将对应.dll复制到项目输出目录,可通过add_custom_command实现:
add_custom_command(TARGET your_target_project POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different
        "${CMAKE_SOURCE_DIR}/path/to/onnxruntime.dll"
        $<TARGET_FILE_DIR:your_target_project>
)

三、CMake项目与含NuGet包的VS C++项目整合

1. 将VS项目作为外部依赖构建

用ExternalProject_Add调用MSBuild构建VS项目,再链接其输出库:

ExternalProject_Add(
    vs_nuget_dep_project
    SOURCE_DIR ${CMAKE_SOURCE_DIR}/path/to/vs_project
    BINARY_DIR ${CMAKE_BINARY_DIR}/vs_project_build
    COMMAND msbuild ${CMAKE_SOURCE_DIR}/path/to/vs_project/your_vs_project.vcxproj 
        /p:Configuration=${CMAKE_BUILD_TYPE},Platform=${CMAKE_VS_PLATFORM_NAME}
    INSTALL_COMMAND ""
)

# 让CMake项目依赖VS项目的构建结果
add_dependencies(your_cmake_target vs_nuget_dep_project)

# 链接VS项目的输出库
find_library(VS_PROJECT_LIB NAMES your_vs_project.lib
    PATHS ${CMAKE_BINARY_DIR}/vs_project_build/${CMAKE_BUILD_TYPE}
)
target_link_libraries(your_cmake_target PRIVATE ${VS_PROJECT_LIB})

2. VS解决方案手动整合

用CMake生成VS解决方案后,手动将现有VS C++项目添加到解决方案中:

  1. 在VS中右键解决方案 → 添加 → 现有项目,选择VS项目的.vcxproj文件;
  2. 右键CMake项目 → 项目依赖,勾选VS项目,确保构建顺序正确;
  3. 在CMakeLists中链接VS项目的输出库,路径指向VS项目的构建输出目录即可。

内容的提问来源于stack exchange,提问作者komeil sh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:52:35