Skip to content

Instantly share code, notes, and snippets.

@sandeshbhusal
Created March 26, 2025 03:36
Show Gist options
  • Save sandeshbhusal/c7d179a67bb882b378f6b9c27ce5cdb0 to your computer and use it in GitHub Desktop.
Save sandeshbhusal/c7d179a67bb882b378f6b9c27ce5cdb0 to your computer and use it in GitHub Desktop.
Really bad cmake config to pull in + build opencv (it is weird)
cmake_minimum_required(VERSION "3.30")
project(cv)
set(OPENCV_SUBMODULE_DIR "vendor/opencv")
set(OPENCV_BUILD_DIR "${OPENCV_SUBMODULE_DIR}/build")
set(OPENCV_REPO "https://github.com/opencv/opencv.git")
# Check if vendor/opencv exists. If not, clone it.
if (NOT EXISTS "${OPENCV_SUBMODULE_DIR}")
message(STATUS "Cloning OpenCV into ${OPENCV_SUBMODULE_DIR}")
execute_process(
COMMAND git clone --depth 1 ${OPENCV_REPO} ${OPENCV_SUBMODULE_DIR}
RESULT_VARIABLE clone_result
)
if(NOT clone_result EQUAL 0)
message(FATAL_ERROR "OpenCV cloning failed with error code: ${clone_result}")
endif()
endif()
# Configure and build OpenCV.
if (EXISTS "${OPENCV_SUBMODULE_DIR}" AND EXISTS "${OPENCV_SUBMODULE_DIR}/CMakeLists.txt")
# Configuration is needed to generate the OpenCVConfig.cmake file we need later.
execute_process(
COMMAND
${CMAKE_COMMAND}
-S "${OPENCV_SUBMODULE_DIR}"
-B "${OPENCV_BUILD_DIR}"
-G "Ninja"
-DBUILD_SHARED_LIBS=OFF
-DBUILD_TESTS=OFF
-DBUILD_PERF_TESTS=OFF
-DBUILD_EXAMPLES=OFF
-DBUILD_JAVA=OFF
-DBUILD_opencv_core=ON
-DBUILD_opencv_dnn=ON
-DBUILD_opencv_imgproc=ON
-DBUILD_opencv_highgui=ON
-DBUILD_opencv_imgcodecs=ON
-DBUILD_opencv_photo=ON
-DBUILD_opencv_videoio=ON
-DBUILD_opencv_features2d=ON
-DBUILD_opencv_ml=OFF
-DBUILD_opencv_python=OFF
-DBUILD_opencv_gapi=OFF
-DBUILD_opencv_flann=OFF
-DBUILD_opencv_js=OFF
-DBUILD_OPENEXR=OFF
-DBUILD_opencv_objc_bindings_gen=OFF
-DBUILD_opencv_python_bindings_gen=OFF
-DBUILD_opencv_ts=OFF
-DBUILD_opencv_video=OFF
-DBUILD_opencv_python_tests=OFF
-DWITH_CUDA=OFF
-DWITH_TIFF=OFF
-DWITH_VA_INTEL=OFF
-DWITH_WEBP=OFF
-DWITH_PNG=OFF
-DWITH_IPP=OFF
-DWITH_ITT=OFF
-DWITH_VA=OFF
-DWITH_V4L=OFF
-DWITH_GTK=OFF
-DWITH_OPENEXR=OFF
-DWITH_OPENCL=OFF
-DCV_ENABLE_INTRINSICS=OFF
RESULT_VARIABLE configure_result
)
if(NOT configure_result EQUAL 0)
message(FATAL_ERROR "OpenCV configuration failed with error code: ${configure_result}")
endif()
execute_process(
COMMAND ${CMAKE_COMMAND} --build "${OPENCV_BUILD_DIR}" # Assume build with ninja. make is painful.
)
else()
message(FATAL_ERROR "OpenCV submodule directory is missing or invalid.")
endif()
# Point to vendor/opencv/build for OpenCV_DIR.
set(OpenCV_DIR "${OPENCV_BUILD_DIR}")
find_package(OpenCV REQUIRED)
message(STATUS "OpenCV version: ${OpenCV_VERSION}")
message(STATUS "OpenCV libraries: ${OpenCV_LIBRARIES}")
message(STATUS "OpenCV include directories: ${OpenCV_INCLUDE_DIRS}")
# Build the project.
add_executable(cv main.cpp)
target_link_libraries(cv PRIVATE ${OpenCV_LIBRARIES})
target_include_directories(cv PRIVATE ${OpenCV_INCLUDE_DIRECTORIES})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment