当前位置:   article > 正文

基于Cmake+QT+VS+CUDA的跨平台编译Dlib+OpenCV项目_c++ dlib+ qt跨平台编译

c++ dlib+ qt跨平台编译

由于项目需求,需要跨平台编译Dlib+OpenCV,并借用MSVC编译器、Qt界面、CUDA加速。

经过摸索,成功实现跨平台编译。切入正题

参考文章:

https://www.cnblogs.com/JoyPoint/p/10549774.html基于Cmake+QT+VS的C++项目构建开发编译简明教程

https://blog.csdn.net/u012234115/article/details/90642844?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task,机器学习库dlib的C++编译和使用(windows和linux)

————————————————————————

1. 所需工具和软件包

(1)Qt5.11.1, 使用MSVC2015_64编译器

(2)Visual Studio 2015 update3,安装“Qt Visual Studio Tools”、QtPackage扩展和更新

(3)Cmake-3.16.5-win64-x64

(4)CUDA-10.1,cudnn-10.1-windows7-x64-v7.6.5.32

(5)dlib-19.19.0

(6)opencv-4.1.2

(7)Anaconda3-4.2.0-Windows-x86_64(玩python时装的,cmake时会检索图片库)

2. 安装并配置环境变量

安装此处不再解释,默认安装,把自己需要的模块安装上就好

(1)Qt系统路径,D:\Qt\Qt5.11.1\5.11.1\msvc2015_64\bin;D:\Qt\Qt5.11.1\5.11.1\msvc2015_64\include;D:\Qt\Qt5.11.1\5.11.1\msvc2015_64\lib;

(2)VS系统路径,C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64;
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include;
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin;
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib;

选择【QT VS Tools】-> 【Qt option】,添加Qt版本,名称“Qt5.11.1”,路径“D:\Qt\Qt5.11.1\5.11.1\msvc2015_64\”

(3)Cmake系统路径,D:\CMake;D:\CMake\bin;

并在系统变量中增加变量名:“CMAKE_PREFIX_PATH”,变量值:“D:\Qt\Qt5.11.1\5.11.1\msvc2015_64\lib\cmake

(4)CUDA系统路径,C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\libnvvp;

C:\Program Files\NVIDIA Corporation\Nsight Compute 2019.3.0\;
C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;
C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;

(5)dlib不需要配

(6)openCV系统路径,D:\OpenCV412\opencv\build\include;
D:\OpenCV412\opencv\build\x64\vc14\bin;
D:\OpenCV412\opencv\build\x64\vc14\lib;
D:\OpenCV412\opencv\build;

(7)Anaconda3系统路径,D:\Program Files (x86)\Anaconda3;
D:\Program Files (x86)\Anaconda3\Scripts;
D:\Program Files (x86)\Anaconda3\Library\bin;

3. 基于Qt Creater构建,在VS中使用

Qt Widgets Application项目新建,选择MSVC2015 x64编译套件。

  • 用VS开发Qt Creater生成的项目:打开VS,选择【Qt VS Tools】,选择【Open Qt Project File(.pro)】,项目打开后即可直接修改、编译。

4. 基于CMake构建

dlib-19.19.0目录下创建以“CMakeLists.txt”命名的文本文件,其内容如下:

  1. cmake_minimum_required(VERSION 2.8.12)
  2. #############################################################################
  3. # #
  4. # READ examples/CMakeLists.txt TO SEE HOW TO USE DLIB FROM C++ WITH CMAKE #
  5. # #
  6. #############################################################################
  7. get_directory_property(has_parent PARENT_DIRECTORY)
  8. if(NOT has_parent)
  9. # When you call add_subdirectory(dlib) from a parent CMake project dlib's
  10. # CMake scripts will assume you want to statically compile dlib into
  11. # whatever you are building rather than create a standalone copy of dlib.
  12. # This means CMake will build dlib as a static library, disable dlib's
  13. # install targets so they don't clutter your project, and adjust a few other
  14. # minor things that are convenient when statically building dlib as part of
  15. # your own projects.
  16. #
  17. # On the other hand, if there is no parent CMake project or if
  18. # DLIB_IN_PROJECT_BUILD is set to false, CMake will compile dlib as a normal
  19. # standalone library (either shared or static, based on the state of CMake's
  20. # BUILD_SHARED_LIBS flag), and include the usual install targets so you can
  21. # install dlib on your computer via `make install`. Since the only reason
  22. # to build this CMakeLists.txt (the one you are reading right now) by itself
  23. # is if you want to install dlib, we indicate as such by setting
  24. # DLIB_IN_PROJECT_BUILD to false.
  25. set(DLIB_IN_PROJECT_BUILD false)
  26. endif()
  27. add_subdirectory(dlib)

在上述目录下新建一个以“CMakeLists.txt”命名的文本文件,用Notepad编辑即可,其内容如下:

  1. #设置cmake版本号
  2. cmake_minimum_required(VERSION 3.4.0)
  3. #设置工程名称
  4. project(QtGuiDemo)
  5. #设置工程包含当前目录,非必须
  6. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  7. #打开全局moc,设置自动生成moc文件,一定要设置
  8. set(CMAKE_AUTOMOC ON)
  9. #打开全局uic,非必须
  10. set(CMAKE_AUTOUIC ON)
  11. #打开全局rcc,非必须,如需打开,注意修改33行的qrc文件名
  12. #set(CMAKE_AUTORCC ON)
  13. #查找需要的Qt库文件,最好每一个库都要写,Qt也会根据依赖关系自动添加
  14. find_package(Qt5Widgets)
  15. find_package(Qt5Core)
  16. find_package(Qt5Gui)
  17. find_package( OpenCV REQUIRED )
  18. include_directories( ${OpenCV_INCLUDE_DIRS})
  19. include(../../PythonAlgorithm/dlib-19.19.0/dlib/cmake)
  20. #查找当前文件夹中的所有源代码文件,也可以通过Set命令将所有文件设置为一个变量
  21. FILE(GLOB SRC_FILES "./*.cpp")
  22. #查找设置当前文件夹中所有的头文件
  23. FILE(GLOB HEAD_FILES "./*.h")
  24. #查找设置当前文件夹中所有的ui文件
  25. FILE(GLOB UI_FILES "./*.ui")
  26. #通过Ui文件生成对应的头文件,一定要添加
  27. qt5_wrap_ui(WRAP_FILES ${UI_FILES})
  28. #添加资源文件,非必须,一旦采用,注意修改相应的qrc文件名
  29. #set(RCC_FILES rcc.qrc)
  30. #将ui文件和生成文件整理在一个文件夹中,非必须
  31. source_group("Ui" FILES ${UI_FILES} ${WRAP_FILES} )
  32. #创建工程文件
  33. add_executable(${PROJECT_NAME} ${SRC_FILES} ${HEAD_FILES} ${RCC_FILES} ${WRAP_FILES})
  34. #添加Qt5依赖项
  35. target_link_libraries(${PROJECT_NAME} Qt5::Widgets Qt5::Core Qt5::Gui)
  36. target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS} dlib::dlib)

运行Cmake-gui,源文件和目标文件选择不同的目录,会比较干净,后期好维护,如下:

  • 勾选"Grouped"和"Advanced",便于列表项汇总扩展显示;点击"Configure"按钮,弹出生成环境选项,目标选择64位编译,选择"Visual Studio 14 2015",并选中"Use default native compilers"用缺省编译器,点击"Finish"按钮,进行安装配置
  • 经过短暂的等待,在窗口中出现若干红色选项,再次点击"Configure"按钮继续生成,红色消失;
  • 如还有红色选项出现,不需其他操作,继续"Configure",直到无红色选项,点"Generate"按钮,生成VS2015的解决方案等文件,提示"Generating done";(此步我未操作)

5. 用批处理方式进行CMake构建

  • 在此项目源文件目录下,新建cmake_build_vs2015_project.bat文本文件(该文件要求必须在项目源文件目录下,即与项目CMakeLists.txt文件同目录下),其内容如下(rem为注释):
  1. @echo off
  2. rem 获取项目CMakeLists.txt文件所在目录
  3. set CURRENT_CMAKE_DIR=%~dp0
  4. rem 获取项目CMakeLists.txt文件所在目录的名称,用于新建构建目录
  5. for /f "delims=" %%i in ("%cd%") do set CURRENT_DIR_NAME=%%~ni
  6. rem 到项目CMakeLists.txt文件所在目录的上级目录
  7. cd..
  8. rem 获取当前目录,%cd%与%~dp0的区别在于获取的目录尾部少了“\”
  9. set CURRENT_DIR=%cd%
  10. rem 设置需要外部构建的目录名称,在源文件目录后面加“_build”
  11. set PROJECT_NAME=%CURRENT_DIR_NAME%_build
  12. rem 设置外部构建的完整路径
  13. set CURRENT_NEW_DIR=%CURRENT_DIR%\%PROJECT_NAME%
  14. echo Cmake in [%CURRENT_NEW_DIR%]
  15. rem 判断是否已经存在外部构建的路径,如果存在删除
  16. if exist %CURRENT_NEW_DIR% (
  17. rd /s/q %CURRENT_NEW_DIR%
  18. )
  19. rem 新建外部构建目录
  20. mkdir %CURRENT_NEW_DIR%
  21. rem 进入新建的外部构建目录,用于Cmake生成项目文档
  22. cd %CURRENT_NEW_DIR%
  23. rem 根据编译环境需要设定VS版本,%CURRENT_CMAKE_DIR%用于指定CMakeLists.txt所在目录,-G 用于指定makefile的生成工具
  24. ::cmake ../ -G "Visual Studio 14 2015 Win64"
  25. ::cmake ../ -G "Visual Studio 14 2015 ARM"
  26. cmake %CURRENT_CMAKE_DIR% -G "Visual Studio 14 2015 Win64" -T host=x64
  27. cd..
  28. rem 查看构建项目的目录树
  29. tree %CURRENT_NEW_DIR% /f
  30. pause
  • 在此项目源文件目录下,运行cmd,进入命令提示符窗口,执行cmake_build_vs2015_project.bat
  • 为什么需要CMake构建项目,主要是在实际项目中,经常会用到多个第三方库,或复杂项目结构,用Qt Creater(qmake)或VS构建,过程会变得很繁琐,一旦设置有误,就会出现很多编译错误,特别是用VS加载第三方库,因此,对简单的Qt工程,采用 qmake或VS,对复杂度高的或需加载多个第三方库的,采用cmake。

等待一段时间后,构建完成。

6. 使用VS打开CmakeQtGuiDemo_build内工程

执行工程,会提示#error "Don't put the dlib folder in your include path"

  • 打开CmakeQtGuiDemo_build、CmakeQtGuiDemo_build/dlib_build目录下的所有ALL_BUILD.vcxproj、QtGuiDemo.sln、QtGuiDemo.vcxproj、ZERO_CHECK.vcxproj、ALL_BUILD.vcxproj、dlib.sln、dlib.vcxproj
  • 搜索,将所有“dlib-19.19.0\dlib;”替换为“dlib-19.19.0”,就可以消除该Error。

7. 重新执行

在release模式下,重新执行工程,这时即可完成工程创建,并将Qt依赖文件复制到目录即可。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/864728?site
推荐阅读
相关标签
  

闽ICP备14008679号