project(Comms DESCRIPTION "Communications Library" LANGUAGES CXX ) set(CMAKE_AUTOMOC ON) find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Network SerialBus) set(INCLUDES include/CanInterface.h include/CanMessage.h include/CloudConnectClient.h include/CloudConnectFrame.h include/CloudConnectServer.h include/crc.h include/format.h include/FrameInterface.h include/main.h include/MessageBuilder.h include/MessageDispatcher.h include/types.h ) set(SRCS src/CanInterface.cpp src/CloudConnectClient.cpp src/CloudConnectFrame.cpp src/CloudConnectServer.cpp src/crc.cpp src/format.cpp src/FrameInterface.cpp src/MessageBuilder.cpp src/MessageDispatcher.cpp src/types.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 Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::SerialBus ) target_include_directories(${PROJECT_NAME} PUBLIC $) 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 ) # Export the targets so a sibling component can find this one without installing export( TARGETS ${PROJECT_NAME} FILE "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${PROJECT_NAME}Targets.cmake" ) 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}") # Config files find_package() consumes, written straight to the source cmake/ dir 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) # Same files staged in the binary dir, for the install() below to copy from 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 staged config files and the export set. Note the DESTINATIONs are # absolute paths into the source tree, so `install` writes back to cmake/ here # rather than to CMAKE_INSTALL_PREFIX. 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(EXPORT ${PROJECT_NAME}Targets DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/cmake")