gpt4 book ai didi

visual-studio-2010 - 如何使用 CMake 将 Visual Studio 项目与 OpenCV(superpack)正确链接

转载 作者:行者123 更新时间:2023-12-02 17:15:43 28 4
gpt4 key购买 nike

我目前正在数字化旧的 VHS 磁带。对于后处理,我想用 C++ 和 OpenCV 实现自定义算法。我已经在 Matlab 中实现了一个有前途的原型(prototype),但它只能处理单个图像(在我的版本(R2010a)中无法读取/写入视频文件;而且,Matlab 太慢了)。

可悲的是,我 - 一遍又一遍 - 坚持使用 CMake。虽然我想知道......这不会那么难。我经常遇到 CMake 的问题,所以我将在这里详细介绍。我希望您不仅可以向我指出我在这里做错了什么,还可以对我使用 CMake 提供一般性建议。也许我做错了,我不知道。

这是我到目前为止所做的:

  • 我已经下载了 OpenCV 2.3.1 super 包来自sourceforge。 superpack 包含 OpenCV 源代码,包括并且 - 最重要的是 - 用于所有主要平台的 .lib 和 .dll 文件。因此,我不需要自己构建 OpenCV。它已经完成了。我只需要使用/链接它。
  • 我在 C:\dev\vs2010sp1_win32\opencv\2.3.1 中安装(即提取到) super 包.
  • 我已重命名 C:\dev\vs2010sp1_win32\opencv\2.3.1\OpenCVConfig.cmake.inOpenCVConfig.cmake .
  • 我为我的项目创建了一个文件夹 C:\dev\VhsDejitterizer具有以下结构:

  • VhsDejitterizer/
    CMakeLists.txt (A)
    src/
    CMakeLists.txt (B)
    libvhsdejitter/
    CMakeLists.txt (C)
    vhsdejitter/
    util.h
    util.cpp
    main/
    CMakeLists.txt (D)
    main.cpp

    以下是各个 CMakeLists.txt 文件的内容。

    /CMakeLists.txt (A)
    CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

    PROJECT("VhsDejitterizer")

    CMAKE_POLICY(SET CMP0015 OLD)
    FIND_PACKAGE(OpenCV REQUIRED
    NO_MODULE
    PATHS "C:/dev/vs2010sp1_win32/opencv/2.3.1"
    NO_DEFAULT_PATH)

    ADD_SUBDIRECTORY("src")

    /src/CMakeLists.txt (B)
    ADD_SUBDIRECTORY("libvhsdejitter")
    ADD_SUBDIRECTORY("main")

    /src/libvhsdejitter/CMakeLists.txt (C)
    UNSET(source_files)
    FILE(GLOB_RECURSE source_files "*.h" "*.cpp")

    ADD_LIBRARY(libvhsdejitter STATIC ${source_files})
    TARGET_LINK_LIBRARIES(libvhsdejitter ${OpenCV_LIBS})

    UNSET(source_files)

    /src/main/CMakeLists.txt (D)
    UNSET(source_files)
    FILE(GLOB_RECURSE source_files "*.h" "*.cpp")

    ADD_EXECUTABLE(main ${source_files})
    TARGET_LINK_LIBRARIES(main libvhsdejitter ${OpenCV_LIBS})

    UNSET(source_files)

    配置和生成 Visual Studio .sln (...) 文件效果很好。事实上,我没有收到任何警告或错误:
    Configuring done
    Generating done

    但是,我在 Visual Studio 中构建“主”项目的尝试失败了:
    1>------ Build started: Project: main, Configuration: Debug Win32 ------
    1>Build started 04.04.2012 14:38:47.
    1>InitializeBuildStatus:
    1> Touching "main.dir\Debug\main.unsuccessfulbuild".
    1>CustomBuild:
    1> All outputs are up-to-date.
    1>ClCompile:
    1> main.cpp
    1>LINK : fatal error LNK1104: cannot open file '@CMAKE_LIB_DIRS_CONFIGCMAKE@/libopencv_gpu.so.@OPENCV_VERSION@@OPENCV_DLLVERSION@@OPENCV_DEBUG_POSTFIX@.lib'
    1>
    1>Build FAILED.
    1>
    1>Time Elapsed 00:00:00.59
    ========== Build: 0 succeeded, 1 failed, 2 up-to-date, 0 skipped ==========

    更多细节:
  • 操作系统:Windows 7 Pro 64 位
  • IDE:Visual Studio 2010 SP1
  • CMake 版本:2.8.4
  • 目标平台(即我编译/构建的目的):Windows 32 位


  • 我的问题:
  • 如何成功构建“主”项目? IE。如何解决该错误?
  • 这些是什么@VARIABLE_OR_SOMETHING@ ?我试图找出它们来自哪里,它们似乎设置在OpenCVConfig.cmake中。 .但他们应该如何工作?它们是否应该在“构建时”由 Visual Studio 评估?如果是这样,他们是如何评估的?
  • 您可能已经注意到我已经建立了一个相当复杂的文件夹结构。你对此有什么建议吗?你如何组织你的图书馆和项目?有最佳实践吗?它们在哪里记录?

  • 谢谢你和最好的问候,罗伯特

    最佳答案

    这些变量可能与 CMake 的 configure_file 有关命令,它允许您指定参数化模板文档(通常以扩展名结尾 .in ),您可以将 CMake 变量替换到文件中以创建它。它们在 configure_file 时进行评估调用,在运行 CMake 时发生。我认为正在发生的事情是,您使用的那个将有一个父 CMake 脚本,它将使用这些变量的内容配置该文件,然后在 add_subdirectory 中使用它。称呼。我建议检查任何描述顶级运行过程的自述文件(或任何定义这些变量然后手动替换它们的文件)。

    关于visual-studio-2010 - 如何使用 CMake 将 Visual Studio 项目与 OpenCV(superpack)正确链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10012008/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com