데브코스를 하면서 강사님의 도움을 받아 git에서 OpenCV를 직접 빌드해보았다.
mkdir build && install
(로컬에서 OpenCV 설치 후 추후 관리를 위해, 꼬임방지)cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX='install path' 'CMakeLists.txt'가 위치한 폴더 경로
make -j4
로 빌드이 때, 4번에서 -DCMAKE_BUILD_TYPE
을Debug
or Release
로 하는 것에 대해서 다시한 번 생각해보게 되었는데,
외부 라이브러리(ex, OpenCV) 를 받아서 내 C++ 프로젝트에 링크를 하고, 이를 활용해서 내 프로젝트 코드를 짤 때, OpenCV Debug
/Release
중 어떤 lib을 써야 하나 라는 생각이 듬
실제 OpenCV 빌드를 통해 Debug vs Release lib 파일들의 용량이 다르다는 것을 확인함
(왼쪽: Debug, 오른쪽: Release, Size 정보 확인 시오른쪽의 파일이 더 가벼운 것을 확인할 수 있음)
Windows 환경에서의 Visual Studio를 활용하여 같은 외부 라이브러리를 링크할 때엔, Debug, Release 모드 용도의 lib들이 각각 존재해 각각의 모드에서 Debug용 lib, Release용 lib을 연동시키고 있음
그렇다면 다음과 같은 가정을 할 수 있다.
1. linux에서도 역시 둘 다 가지고 있다가 디버깅 용의 OpenCV lib와 릴리즈 용의 OpenCV lib를 내 프로젝트의 빌드 용도에 따라 각각 빌드함
2. OpenCV는 이미 완성형이라 가정, Release lib를 넣어 내 프로젝트 빌드에 활용
뭔가 1번이 맞을 것 같긴 한데 CMake를 다루는 관점에서 갱장히 번거롭다..ㅠㅠ 알게 되면 추가로 수정해 볼 생각..
(+추가, 황선규 강사님의 답변)
말 그대로 Debug 용도로 빌드하면 디버깅이 가능하기 때문에 개발 과정에서는 유리한 점이 있습니다. 특히 windows 운영 체제에서 visual studio를 사용한다면 ImageWatch 같은 확장 프로그램을 이용할 수 있어서 디버깅이 매우 편하다는 장점이 있습니다.
다만 리눅스에서는 그 정도로 디버깅이 편하지는 않기때문에, 그냥 Release 형태로 빌드해서 사용해도 무난하지 않나 생각합니다. 아마 VS Code를 사용한다면 브레이크 포인트를 걸고, Mat 객체의 멤버 변수 값을 볼 수 있는 것으로 알고 있는데요.. 아마 Release 로 빌드해도 그정도는 보였던 걸로 기억합니다. 그러니 리눅스에서는 Release로 빌드해서 사용해도 무난할 것 같아요.