project(Comms DESCRIPTION "Communications Library" LANGUAGES CXX ) set(CMAKE_VERBOSE_MAKEFILE ON) set(CMAKE_AUTOMOC ON) find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Network SerialBus) find_package(MsgUtils HINTS ${CMAKE_CURRENT_SOURCE_DIR}/../MsgUtils REQUIRED) set(INCLUDES include/CanInterface.h include/ProtoInterface.h ) set(SRCS src/CanInterface.cpp src/ProtoInterface.cpp ) add_library(${PROJECT_NAME} SHARED) target_sources(${PROJECT_NAME} PRIVATE ${INCLUDES} ${SRCS}) set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER "${INCLUDES}" ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/lib" ADDITIONAL_CLEAN_FILES " \ ${CMAKE_CURRENT_SOURCE_DIR}/bin; \ ${CMAKE_CURRENT_SOURCE_DIR}/lib; \ ${CMAKE_CURRENT_SOURCE_DIR}/cmake \ " ) target_link_libraries(${PROJECT_NAME} PUBLIC MsgUtils Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::SerialBus ) target_include_directories(${PROJECT_NAME} PUBLIC $) target_compile_definitions(${PROJECT_NAME} PRIVATE COMMS_LIBRARY) install( TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Targets PUBLIC_HEADER DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/include" RUNTIME DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/bin" ARCHIVE DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/lib" LIBRARY DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/lib" COMPONENT dev ) # set up include-directories include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include" "${PROJECT_BINARY_DIR}") # Add all targets to the build-tree export set export( TARGETS ${PROJECT_NAME} FILE "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${PROJECT_NAME}Targets.cmake" ) # Export the package for use from the build-tree (this registers the build-tree # with a global CMake-registry) export(PACKAGE ${PROJECT_NAME}) file(RELATIVE_PATH REL_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cmake" "${CMAKE_CURRENT_SOURCE_DIR}/include") set(CONF_INCLUDE_DIRS "\${COMMS_CMAKE_DIR}/${REL_INCLUDE_DIR}") # Create the ${PROJECT_NAME}Config.cmake and # ${PROJECT_NAME}ConfigVersion.cmake files ... for the build tree configure_file(${PROJECT_NAME}Config.cmake.in "${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake" @ONLY) configure_file(${PROJECT_NAME}ConfigVersion.cmake.in "${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}ConfigVersion.cmake" @ONLY) # ... for the install tree configure_file(${PROJECT_NAME}Config.cmake.in "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${PROJECT_NAME}Config.cmake" @ONLY) configure_file( ${PROJECT_NAME}ConfigVersion.cmake.in "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${PROJECT_NAME}ConfigVersion.cmake" @ONLY) # Install the ${PROJECT_NAME}Config.cmake and ${PROJECT_NAME}ConfigVersion.cmake install( FILES "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${PROJECT_NAME}Config.cmake" "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${PROJECT_NAME}ConfigVersion.cmake" DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ) # Install the export set for use with the install-tree install(EXPORT ${PROJECT_NAME}Targets DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/cmake")