Created
March 26, 2025 03:36
-
-
Save sandeshbhusal/c7d179a67bb882b378f6b9c27ce5cdb0 to your computer and use it in GitHub Desktop.
Really bad cmake config to pull in + build opencv (it is weird)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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