对Using OpenCV with gcc and CMake的补充
https://docs.opencv.org/4.5.5/db/df5/tutorial_linux_gcc_cmake.html
写的已经不错,我补充点,让教程更便捷。
opencv源码编译
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/home/xxx/cv ..
make
make install
编译好的头文件和库就都安装到 /home/xxx 目录下的cv文件夹了。主要是不想污染 /lib
cmake list写法
官方教程里用了
find_package( OpenCV REQUIRED ) 配置有点麻烦。
我是这么写的:
/home/xxx/opencv/build 是我编译opencv的地方
1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | cmake_minimum_required(VERSION 3.7) project(cv- test VERSION 0.1.0) set (CMAKE_CXX_STANDARD 11) set (CMAKE_CXX_STANDARD_REQUIRED True) file (GLOB SOURCE_FILES "*.cpp" ) add_executable(${PROJECT_NAME} ${SOURCE_FILES}) set (OpenCV_DIR /home/xxx/opencv/build ) FIND_PACKAGE(OpenCV) IF (${OpenCV_FOUND}) MESSAGE(STATUS "Found OPENCV." ) ELSE (${OpenCV_FOUND}) MESSAGE(STATUS "Could not locate opencv. where u install opencv lib?" ) ENDIF (${OpenCV_FOUND}) IF (${OpenCV_FOUND}) INCLUDE_DIRECTORIES( ${OpenCV_INCLUDE_DIRS} ) ENDIF (${OpenCV_FOUND}) IF (${OpenCV_FOUND}) target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS}) ENDIF (${OpenCV_FOUND}) set (CMAKE_BUILD_TYPE "Debug" ) # set(CMAKE_BUILD_TYPE "Release") if ( CMAKE_BUILD_TYPE STREQUAL "Debug" ) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -g -Wall -Wno-unused-variable -pthread" ) MESSAGE(STATUS "Debug" ) else ( CMAKE_BUILD_TYPE STREQUAL "Debug" ) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O2 -pthread -fopenmp" ) MESSAGE(STATUS "Release" ) endif( CMAKE_BUILD_TYPE STREQUAL "Debug" ) |
之前用过更低级但是简单的写法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | cmake_minimum_required(VERSION 2.8) project( test00 ) include_directories( /home/xxx/cv/include/opencv4 } ) add_executable( test00 main.cpp arrowedline2.cpp ) target_link_libraries( test00 /home/xxx/cv/lib/libopencv_core.so /home/xxx/cv/lib/libopencv_imgproc.so /home/xxx/cv/lib/libopencv_highgui.so /home/xxx/cv/lib/libopencv_imgcodecs.so ) set(CMAKE_BUILD_TYPE "Release" ) if ( CMAKE_BUILD_TYPE STREQUAL "Debug" ) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -g -Wall -Wno-unused-variable -pthread" ) else ( CMAKE_BUILD_TYPE STREQUAL "Debug" ) set(CMAKE_BUILD_TYPE "Release" ) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O2 -pthread -fopenmp" ) endif( CMAKE_BUILD_TYPE STREQUAL "Debug" ) message( "Build Type:" ${CMAKE_BUILD_TYPE} ${CMAKE_CXX_FLAGS}) |
set(CMAKE_BUILD_TYPE "Release") 之后的部分不重要,可以全部去掉。
其他的按照官方教程走,没问题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)