我目前正在数字化旧的 VHS 磁带。对于后处理,我想使用 C++ 和 OpenCV 实现自定义算法。我已经在 Matlab 中实现了一个有前途的原型,但它只能处理单个图像(在我的版本(R2010a)中无法读取/写入视频文件;而且,Matlab 太慢了)。
可悲的是,我 - 一遍又一遍 - 坚持使用 CMake。虽然我想知道......这不会那么难。我经常遇到 CMake 的问题,所以我将在这里详细介绍。我希望您不仅可以向我指出我在这里做错了什么,还可以对我使用 CMake 提供一般性建议。也许我做错了,我不知道。
这是我到目前为止所做的:
- 我已经从 sourceforge下载了OpenCV 2.3.1 superpack 。superpack 包含 OpenCV 源代码,包括并且 - 最重要的是 - 用于所有主要平台的 .lib 和 .dll 文件。因此,我不需要自己构建 OpenCV。它已经完成了。我只需要使用/链接它。
- 我在
C:\dev\vs2010sp1_win32\opencv\2.3.1
. - 我已重命名
C:\dev\vs2010sp1_win32\opencv\2.3.1\OpenCVConfig.cmake.in
为OpenCVConfig.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 (一)
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 位
我的问题:
- 如何成功构建“主”项目?即如何解决该错误?
- 这些是什么
@VARIABLE_OR_SOMETHING@
?我试图找出它们来自哪里,它们似乎是在OpenCVConfig.cmake
. 但他们应该如何工作?它们是否应该在“构建时”由 Visual Studio 评估?如果是这样,他们是如何评估的? - 您可能已经注意到我已经建立了一个相当复杂的文件夹结构。你对此有什么建议吗?你如何组织你的图书馆和项目?有最佳实践吗?它们在哪里记录?
谢谢你和最好的问候,罗伯特