CommonLibraries/CMakeLists.txt
Ben 51e364997a feat: add continuous exposure control and native-depth metering
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.
2026-09-22 20:45:56 +08:00

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)