Initial commit
This commit is contained in:
137
opencamcpp/CMakeLists.txt
Normal file
137
opencamcpp/CMakeLists.txt
Normal file
@@ -0,0 +1,137 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
project(opencam LANGUAGES CXX)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
set(CMAKE_AUTORCC ON)
|
||||
set(CMAKE_AUTOUIC ON)
|
||||
|
||||
# Add OpenCV directory to CMAKE_PREFIX_PATH
|
||||
list(APPEND CMAKE_PREFIX_PATH "/usr/local")
|
||||
|
||||
# Find Qt5
|
||||
find_package(Qt5 COMPONENTS
|
||||
Core
|
||||
Gui
|
||||
Widgets
|
||||
Network
|
||||
REQUIRED
|
||||
)
|
||||
|
||||
# Find OpenCV
|
||||
find_package(OpenCV REQUIRED)
|
||||
message(STATUS "OpenCV version: ${OpenCV_VERSION}")
|
||||
message(STATUS "OpenCV libraries: ${OpenCV_LIBS}")
|
||||
message(STATUS "OpenCV include dirs: ${OpenCV_INCLUDE_DIRS}")
|
||||
|
||||
# Check for CUDA support in OpenCV
|
||||
if(";${OpenCV_LIBS};" MATCHES ";opencv_cudaimgproc;")
|
||||
message(STATUS "OpenCV CUDA support found")
|
||||
find_package(CUDA REQUIRED)
|
||||
enable_language(CUDA)
|
||||
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-O3)
|
||||
add_definitions(-DWITH_CUDA)
|
||||
set(HAS_CUDA TRUE)
|
||||
else()
|
||||
message(STATUS "OpenCV was built without CUDA support. GPU acceleration will be disabled.")
|
||||
set(HAS_CUDA FALSE)
|
||||
endif()
|
||||
|
||||
# Add source files
|
||||
add_executable(${PROJECT_NAME}
|
||||
main.cpp
|
||||
)
|
||||
|
||||
# Link libraries
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE
|
||||
Qt5::Core
|
||||
Qt5::Gui
|
||||
Qt5::Widgets
|
||||
Qt5::Network
|
||||
${OpenCV_LIBS}
|
||||
)
|
||||
|
||||
if(HAS_CUDA)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE
|
||||
${CUDA_LIBRARIES}
|
||||
)
|
||||
endif()
|
||||
|
||||
# Include directories
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE
|
||||
${OpenCV_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
if(HAS_CUDA)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE
|
||||
${CUDA_INCLUDE_DIRS}
|
||||
)
|
||||
endif()
|
||||
|
||||
# Installation rules
|
||||
install(TARGETS ${PROJECT_NAME}
|
||||
RUNTIME DESTINATION bin
|
||||
COMPONENT applications
|
||||
)
|
||||
|
||||
# Function to safely install a library and its dependencies
|
||||
function(install_library lib_path)
|
||||
if(EXISTS "${lib_path}")
|
||||
file(REAL_PATH "${lib_path}" real_path)
|
||||
install(FILES "${real_path}"
|
||||
DESTINATION lib
|
||||
COMPONENT libraries
|
||||
)
|
||||
|
||||
# Get library dependencies
|
||||
execute_process(
|
||||
COMMAND ldd "${real_path}"
|
||||
OUTPUT_VARIABLE LDD_OUTPUT
|
||||
)
|
||||
|
||||
# Extract and install dependencies
|
||||
string(REGEX MATCHALL "/[^)]*\\.so[^)]*" DEPS "${LDD_OUTPUT}")
|
||||
foreach(dep ${DEPS})
|
||||
if(EXISTS "${dep}" AND NOT "${dep}" MATCHES "^/lib" AND NOT "${dep}" MATCHES "^/usr/lib")
|
||||
install(FILES "${dep}"
|
||||
DESTINATION lib
|
||||
COMPONENT libraries
|
||||
)
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Install OpenCV libraries
|
||||
foreach(lib ${OpenCV_LIBS})
|
||||
get_target_property(lib_location ${lib} LOCATION)
|
||||
if(lib_location)
|
||||
install_library("${lib_location}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# Install Qt plugins
|
||||
if(Qt5_DIR)
|
||||
file(GLOB_RECURSE QT_PLUGINS "${Qt5_DIR}/../../../plugins/*.so")
|
||||
foreach(plugin ${QT_PLUGINS})
|
||||
get_filename_component(plugin_path "${plugin}" DIRECTORY)
|
||||
get_filename_component(plugin_dir "${plugin_path}" NAME)
|
||||
install(FILES "${plugin}"
|
||||
DESTINATION plugins/${plugin_dir}
|
||||
COMPONENT plugins
|
||||
)
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
# Print configuration summary
|
||||
message(STATUS "")
|
||||
message(STATUS "Configuration Summary")
|
||||
message(STATUS "--------------------")
|
||||
message(STATUS "OpenCV version: ${OpenCV_VERSION}")
|
||||
message(STATUS "CUDA support: ${HAS_CUDA}")
|
||||
message(STATUS "Qt version: ${Qt5_VERSION}")
|
||||
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
|
||||
message(STATUS "C++ compiler: ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
|
||||
message(STATUS "Installation prefix: ${CMAKE_INSTALL_PREFIX}")
|
||||
message(STATUS "")
|
||||
Reference in New Issue
Block a user