63 lines
2.2 KiB
CMake
63 lines
2.2 KiB
CMake
cmake_minimum_required(VERSION 3.15)
|
|
project(TextReader LANGUAGES CXX)
|
|
|
|
# Set C++ standard and enable modern practices
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF) # Disable compiler-specific extensions
|
|
|
|
# Configure where binaries will be placed
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
|
|
# For larger projects
|
|
option(BUILD_TESTS "Build tests" OFF)
|
|
if(BUILD_TESTS)
|
|
enable_testing()
|
|
add_subdirectory(tests)
|
|
endif()
|
|
|
|
|
|
# Install target (for packaging)
|
|
# install(TARGETS text_reader DESTINATION bin)
|
|
# install(DIRECTORY data/ DESTINATION share/text_reader/data)
|
|
|
|
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(GLIB REQUIRED glib-2.0 gobject-2.0 nlohmann_json gstreamer-base-1.0 gstreamer-1.0 gstreamer-video-1.0)
|
|
|
|
|
|
|
|
include_directories(/usr/lib/x86_64-linux-gnu/glib-2.0/include)
|
|
include_directories(/usr/include/gstreamer-1.0)
|
|
include_directories(/usr/include/nlohmann)
|
|
include_directories(${PROJECT_SOURCE_DIR}/camera_manager.hpp)
|
|
include_directories(${PROJECT_SOURCE_DIR}/pipeline_manager.hpp)
|
|
include_directories(${PROJECT_SOURCE_DIR}/streammux_manager.hpp)
|
|
|
|
|
|
set(SOURCES src/main.cpp src/camera_manager.cpp src/pipeline_manager.cpp src/streammux_manager.cpp)
|
|
# Create the executable
|
|
add_executable(${PROJECT_NAME} ${SOURCES})
|
|
|
|
# Copy data files to build directory
|
|
file(COPY data/ DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/data)
|
|
|
|
# Set compiler warnings
|
|
target_compile_options(${PROJECT_NAME} PRIVATE
|
|
$<$<CXX_COMPILER_ID:MSVC>:/W4 /WX>
|
|
$<$<OR:$<CXX_COMPILER_ID:GNU>,$<CXX_COMPILER_ID:Clang>>:-Wall -Wextra -pedantic -Werror>
|
|
)
|
|
|
|
# Platform-specific configurations
|
|
if(WIN32)
|
|
target_compile_definitions(${PROJECT_NAME} PRIVATE _CRT_SECURE_NO_WARNINGS)
|
|
endif()
|
|
|
|
# Include current directory for headers
|
|
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
|
|
target_include_directories(${PROJECT_NAME} PRIVATE ${GLIB_INCLUDE_DIRS})
|
|
target_link_libraries(${PROJECT_NAME} ${GLIB_LIBRARIES})
|
|
|
|
target_link_libraries(${PROJECT_NAME} gstbase-1.0 gstreamer-1.0 gstrtp-1.0 gstvideo-1.0) |