diff --git a/.gitignore b/.gitignore index 76b96744d4282e121eb982b4280873ad526325dc..5a50ff88f595c26fea1b63fc17aaca923708115e 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,4 @@ CMakeCache.txt *.qm *.ilk *.pdb -*.lib -*.json -*.txt -*.xml \ No newline at end of file +*.lib \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..1e8bac515463dc02d621f9c0d4d0cd065677cc04 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,82 @@ +cmake_minimum_required(VERSION 3.12) + +exec_program("git" ${CMAKE_CURRENT_SOURCE_DIR} ARGS "describe --tags --abbrev=0" OUTPUT_VARIABLE GIT_TAG) + +project(BT_Interfaces + VERSION ${GIT_TAG} + LANGUAGES CXX) + +include(GNUInstallDirs) + +set(INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Installation directory for executables") +set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Installation directory for libraries") +set(INSTALL_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} CACHE PATH "Installation directory for header files") +set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} CACHE STRING "Installation directory for cmake configuration files") + +set(TN BT_Interfaces) +add_library(${TN} SHARED) +set_target_properties(${TN} PROPERTIES OUTPUT_NAME bt_interfaces) +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") + set_target_properties(${TN} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS true) +endif() + +include(Src/CMakeLists.txt) + +install( + TARGETS + BT_Interfaces + EXPORT + ${PROJECT_NAME}Targets + RUNTIME DESTINATION "${INSTALL_BINDIR}" + LIBRARY DESTINATION "${INSTALL_LIBDIR}" + ARCHIVE DESTINATION "${INSTALL_LIBDIR}" +) +foreach(file ${BT_Interfaces_PUBLIC_HEADERS}) + file(RELATIVE_PATH rel_path "${CMAKE_CURRENT_LIST_DIR}/Src" ${file}) + get_filename_component(install_path ${rel_path} DIRECTORY) + install(FILES ${file} DESTINATION "${INSTALL_INCLUDEDIR}/${install_path}") +endforeach() + +export( + TARGETS + BT_Interfaces + FILE "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake" +) + +install(EXPORT ${PROJECT_NAME}Targets + FILE ${PROJECT_NAME}Targets.cmake + DESTINATION ${INSTALL_CONFIGDIR} +) + +include(CMakePackageConfigHelpers) + +write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY AnyNewerVersion +) + +configure_package_config_file( + ${CMAKE_CURRENT_LIST_DIR}/cmake/${PROJECT_NAME}Config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake + INSTALL_DESTINATION ${INSTALL_CONFIGDIR} +) + +install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + DESTINATION ${INSTALL_CONFIGDIR} +) + +install( + FILES + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Deploy.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Windeployqt.cmake + DESTINATION ${INSTALL_CONFIGDIR}/Modules/${PROJECT_NAME} +) + +set(CPACK_GENERATOR "TXZ") +set(CPACK_PACKAGE_VERSION ${GIT_TAG}) + +include(CPack) diff --git a/Src/CMakeLists.txt b/Src/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..b0570a31efa5aa390f5b78dde209899fa569510b --- /dev/null +++ b/Src/CMakeLists.txt @@ -0,0 +1,72 @@ +############################################################## +#### Biotracker: Interfaces +############################################################## + +target_include_directories(${TN} PUBLIC + $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}> + $<INSTALL_INTERFACE:${INSTALL_INCLUDEDIR}> +) + +find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets OpenGL Xml Network) +target_link_libraries(${TN} Qt5::Core Qt5::Gui Qt5::Xml Qt5::Network Qt5::Widgets) + +find_package(OpenCV 3 REQUIRED) +target_link_libraries(${TN} ${OpenCV_LIBS}) + +set_target_properties(${TN} PROPERTIES POSITION_INDEPENDENT_CODE ON) +set_target_properties(${TN} PROPERTIES AUTOMOC ON AUTOUIC ON AUTORCC ON) +set_target_properties(${TN} PROPERTIES + CXX_STANDARD 17 + CXX_STANDARD_REQUIRED YES + CXX_EXTENSIONS NO +) + +target_compile_definitions(${TN} PRIVATE RF_INTERFACES_EXPORT) + +target_sources(${TN} +PRIVATE + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IBioTrackerContext.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IBioTrackerPlugin.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IController/IController.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModel.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelAreaDescriptor.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelDataExporter.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelTrackedComponent.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelTrackedComponentFactory.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelTrackedTrajectory.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelTrackingAlgorithm.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IObject.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/Serializable.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IView.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewGraphicsPixmapItem.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewGraphicsScene.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewGraphicsView.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewMainWindow.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewOpenGLWidget.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewTrackedComponent.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewWidget.cpp" +) + +set(${TN}_PUBLIC_HEADERS + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/ENUMS.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IBioTrackerContext.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IBioTrackerPlugin.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IController/IController.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModel.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelAreaDescriptor.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelDataExporter.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelTrackedComponent.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelTrackedComponentFactory.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelTrackedTrajectory.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelTrackingAlgorithm.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IObject.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/Serializable.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IView.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewGraphicsPixmapItem.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewGraphicsScene.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewGraphicsView.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewMainWindow.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewOpenGLWidget.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewTrackedComponent.h" + "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewWidget.h" +) diff --git a/cmake/InterfacesConfig.cmake.in b/cmake/BT_InterfacesConfig.cmake.in similarity index 100% rename from cmake/InterfacesConfig.cmake.in rename to cmake/BT_InterfacesConfig.cmake.in