cmake_minimum_required(VERSION 3.20) project(LogisticModule LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -DDEBUG") set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Debug) endif() set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build) include_directories(shared) # Logistic module as shared library (.so) add_library(logistic-module SHARED src/LogisticModule.cpp ) set_target_properties(logistic-module PROPERTIES PREFIX "" SUFFIX ".so" OUTPUT_NAME "logistic" ) # Test executable add_executable(logistic-test src/LogisticModule.cpp tests/LogisticTest.cpp ) # Standalone executable add_executable(logistic-standalone src/LogisticModule.cpp src/main.cpp ) add_custom_target(build-logistic DEPENDS logistic-module COMMENT "Building logistic.so module" ) add_custom_target(test-logistic DEPENDS logistic-test COMMAND ./build/logistic-test COMMENT "Running logistic module tests" ) add_custom_target(clean-logistic COMMAND ${CMAKE_COMMAND} -E remove_directory build COMMAND ${CMAKE_COMMAND} -E make_directory build COMMENT "Cleaning logistic module build" ) message(STATUS "🚛 Logistic Module configured:") message(STATUS " cmake . : Configure") message(STATUS " make logistic-module : Build logistic.so") message(STATUS " make test-logistic : Run tests") message(STATUS " make clean-logistic : Clean build")