Add continuous global/ROI feedback with decision tracing, valid-image masks, and exact Gray16 source means alongside normalized metrics. Preserve legacy control behavior and expose the 1.3.0 API. Validation: Release CTest 12/12 (70 cases), installed consumer 1/1, and diff checks passed. Software-only verification; no real device operation.
70 lines
3.5 KiB
CMake
70 lines
3.5 KiB
CMake
cmake_minimum_required(VERSION 3.24)
|
|
project(TargetExposureControl VERSION 1.3.0 LANGUAGES CXX)
|
|
|
|
include(GNUInstallDirs)
|
|
include(CMakePackageConfigHelpers)
|
|
find_package(OpenCV 4 REQUIRED COMPONENTS core imgproc)
|
|
|
|
add_library(target_exposure_control STATIC
|
|
src/config.cpp src/metering.cpp src/history.cpp src/predictor.cpp
|
|
src/controller.cpp src/exposure_control.cpp src/continuous_control.cpp)
|
|
add_library(TargetExposureControl::Control ALIAS target_exposure_control)
|
|
set_target_properties(target_exposure_control PROPERTIES EXPORT_NAME Control
|
|
POSITION_INDEPENDENT_CODE ON CXX_EXTENSIONS OFF)
|
|
target_compile_features(target_exposure_control PUBLIC cxx_std_17)
|
|
target_include_directories(target_exposure_control PUBLIC
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
|
|
target_link_libraries(target_exposure_control PUBLIC ${OpenCV_LIBS})
|
|
|
|
function(tec_warnings target)
|
|
if(MSVC)
|
|
target_compile_options(${target} PRIVATE /W4 /permissive- /utf-8)
|
|
else()
|
|
target_compile_options(${target} PRIVATE -Wall -Wextra -Wpedantic)
|
|
endif()
|
|
endfunction()
|
|
tec_warnings(target_exposure_control)
|
|
|
|
option(TEC_BUILD_TESTS "Build deterministic offline tests" ${PROJECT_IS_TOP_LEVEL})
|
|
option(TEC_BUILD_EXAMPLES "Build the minimal simulated caller" ${PROJECT_IS_TOP_LEVEL})
|
|
if(TEC_BUILD_TESTS)
|
|
enable_testing()
|
|
add_executable(target_exposure_tests tests/tests.cpp)
|
|
target_link_libraries(target_exposure_tests PRIVATE TargetExposureControl::Control)
|
|
tec_warnings(target_exposure_tests)
|
|
foreach(group IN ITEMS metering stateless history prediction controller states recovery lifecycle feedback config continuous)
|
|
add_test(NAME tec_${group} COMMAND target_exposure_tests ${group})
|
|
set_tests_properties(tec_${group} PROPERTIES TIMEOUT 30)
|
|
endforeach()
|
|
endif()
|
|
if(TEC_BUILD_EXAMPLES)
|
|
add_executable(target_exposure_example examples/minimal.cpp)
|
|
target_link_libraries(target_exposure_example PRIVATE TargetExposureControl::Control)
|
|
tec_warnings(target_exposure_example)
|
|
if(TEC_BUILD_TESTS)
|
|
add_test(NAME tec_minimal_example COMMAND target_exposure_example)
|
|
set_tests_properties(tec_minimal_example PROPERTIES TIMEOUT 30)
|
|
endif()
|
|
endif()
|
|
|
|
install(TARGETS target_exposure_control EXPORT TargetExposureControlTargets
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
|
install(EXPORT TargetExposureControlTargets NAMESPACE TargetExposureControl::
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TargetExposureControl)
|
|
configure_package_config_file(cmake/TargetExposureControlConfig.cmake.in
|
|
${CMAKE_CURRENT_BINARY_DIR}/TargetExposureControlConfig.cmake
|
|
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TargetExposureControl)
|
|
write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/TargetExposureControlConfigVersion.cmake
|
|
VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion)
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/TargetExposureControlConfig.cmake
|
|
${CMAKE_CURRENT_BINARY_DIR}/TargetExposureControlConfigVersion.cmake
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TargetExposureControl)
|
|
install(FILES README.md 实施记录.md
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/doc/TargetExposureControl)
|
|
install(FILES docs/控制与状态说明.md
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/doc/TargetExposureControl/docs)
|
|
install(FILES examples/minimal.cpp examples/static_station_config.hpp
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/doc/TargetExposureControl/examples)
|