소스 뷰어
cmake_minimum_required(VERSION 3.10)
project(OpenCV_Static_Example)

# C++ 표준 설정
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# OpenCV를 정적 라이브러리로 사용하도록 설정
set(BUILD_SHARED_LIBS OFF)
set(OpenCV_STATIC ON)
add_definitions(-DOPENCV_STATIC)

# UTF-8 인코딩 강제 적용
add_compile_options(/utf-8)
add_link_options(/ignore:4099)

# 멀티스레딩 런타임 라이브러리 사용 설정
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")

# OpenCV 디렉토리 설정
set(OpenCV_DIR "C:/opencv/build")  # OpenCV CMake 경로
set(OpenCV_INCLUDE_DIR "${OpenCV_DIR}/install/include")  # OpenCV 헤더 경로
set(OpenCV_LIB_DIR "${OpenCV_DIR}/install/x64/vc17/staticlib")  # OpenCV 라이브러리 경로

set( CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE )
find_package(OpenCV REQUIRED)

# OpenCV 버전 문자열 생성 (예: 4120)
set(OpenCV_VERSION_STR "${OpenCV_VERSION_MAJOR}${OpenCV_VERSION_MINOR}${OpenCV_VERSION_PATCH}")

# 실행 파일 생성
add_executable(opencv_static main.cpp)

# include 경로 추가
#target_include_directories(opencv_static PRIVATE ${OpenCV_INCLUDE_DIRS})
include_directories( ${OpenCV_INCLUDE_DIR} )

# 라이브러리 경로 추가
target_link_directories(opencv_static PRIVATE ${OpenCV_LIB_DIR})

# 디버그 및 릴리즈 라이브러리 설정
target_link_libraries(opencv_static PRIVATE
    $<$<CONFIG:Debug>:opencv_world${OpenCV_VERSION_STR}d.lib opencv_img_hash${OpenCV_VERSION_STR}d.lib>
    $<$<CONFIG:Debug>:aded.lib IlmImfd.lib ippicvmt.lib ippiwd.lib ittnotifyd.lib>
    $<$<CONFIG:Debug>:libjpeg-turbod.lib libopenjp2d.lib libpngd.lib libprotobufd.lib>
    $<$<CONFIG:Debug>:libtiffd.lib libwebpd.lib zlibd.lib>

    $<$<CONFIG:Release>:opencv_world${OpenCV_VERSION_STR}.lib opencv_img_hash${OpenCV_VERSION_STR}.lib>
    $<$<CONFIG:Release>:ade.lib IlmImf.lib ippicvmt.lib ippiw.lib ittnotify.lib>
    $<$<CONFIG:Release>:libjpeg-turbo.lib libopenjp2.lib libpng.lib libprotobuf.lib>
    $<$<CONFIG:Release>:libtiff.lib libwebp.lib zlib.lib>
)

# 디버깅 메시지 출력
message(STATUS "OpenCV library status:")
message(STATUS "    현재 빌드 모드: ${CMAKE_BUILD_TYPE}")
message(STATUS "    OpenCV version: ${OpenCV_VERSION}")
message(STATUS "    OpenCV_DIR: ${OpenCV_DIR}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")
message(STATUS "    libraries: ${OpenCV_LIBS}")