find_package(OpenCV REQUIRED)
find_package()
: CMake가 시스템에서 OpenCV 라이브러리를 찾는 명령REQUIRED
: OpenCV를 반드시 찾아야 한다는 조건이야. 만약 OpenCV를 찾지 못하면 빌드가 중단되고 에러가 발생해.find_package()
는 시스템에서 OpenCV를 찾아서 경로 정보와 라이브러리 정보를 제공해.${OpenCV_INCLUDE_DIRS}
: OpenCV의 헤더 파일들이 위치한 경로.${OpenCV_LIBS}
: OpenCV의 필요한 라이브러리 목록.include_directories(include ${OpenCV_INCLUDE_DIRS})
include_directories()
: 컴파일할 때 사용할 헤더 파일 경로를 포함하는 명령어야.include/
: 네가 만든 프로젝트의 헤더 파일 폴더(예: Calculator.h
).${OpenCV_INCLUDE_DIRS}
: find_package()
가 찾은 OpenCV 헤더 파일 경로.#include
로 헤더 파일을 가져올 때, 컴파일러가 헤더 파일이 어디 있는지 알아야 해. 만약 네가 코드에서 이렇게 사용한다면:
#include <opencv2/opencv.hpp>
opencv.hpp
파일을 ${OpenCV_INCLUDE_DIRS}
경로에서 찾아.target_link_libraries(calculator ${OpenCV_LIBS})
target_link_libraries()
: 빌드할 실행 파일(calculator
)과 필요한 라이브러리 파일들을 연결(link) 하는 명령어야.${OpenCV_LIBS}
: OpenCV 라이브러리들의 목록이 이 변수에 담겨 있어..so
(Linux)나 .dll
(Windows) 라이브러리 파일들이 필요해.undefined reference to `cv::imshow(...)'
이건 OpenCV 함수를 찾지 못해서 생기는 오류야.find_package(OpenCV REQUIRED)
:
include_directories(include ${OpenCV_INCLUDE_DIRS})
:
target_link_libraries(calculator ${OpenCV_LIBS})
:
find_package()
: “OpenCV 책이 어디 있는지 찾아와.” include_directories()
: “찾아온 책의 내용(헤더 파일)을 읽을 수 있게 설정해.” target_link_libraries()
: “이 책(라이브러리)을 실제로 사용할 수 있도록 연결해.”import
하는 것과 비슷하지만, 좀 더 복잡하게 구성돼 있는 거지.이제 이해가 좀 됐을까? 더 궁금한 점이 있으면 언제든지 물어봐! 😊
find_package(OpenCV REQUIRED)
는 CMake 설정 파일(OpenCVConfig.cmake
)을 /usr/local/lib/cmake
등에서 찾는 거야.OpenCV
는 단순한 폴더 이름이 아니라, CMake가 사용할 수 있는 패키지 이름이야.find_package()
가 어디서 찾을까?CMake는 보통 여러 경로를 차례대로 탐색해. 가장 많이 사용하는 경로는 다음과 같아:
/usr/local/lib/cmake
/usr/local/
하위 경로들CMAKE_PREFIX_PATH
나 OpenCV_DIR
)로 지정된 경로즉, CMake는 /usr/local/bin
이 아니라, /usr/local/lib/cmake
같은 경로에서 OpenCV의 설정 파일을 찾는 거야.
OpenCV를 설치한 후 보통 이런 경로 구조가 생겨:
/usr/local/lib/cmake/opencv4/
│── OpenCVConfig.cmake
│── OpenCVModules.cmake
...
/usr/local/include/opencv4/ # 헤더 파일 경로
/usr/local/lib/ # 라이브러리 경로
OpenCVConfig.cmake
: 이 파일은 OpenCV가 설치된 경로와 필요한 라이브러리들을 정의해. find_package()
명령을 실행할 때 이 파일을 찾아 OpenCV의 헤더 파일과 라이브러리를 연결해주는 거야.