CMake packaging
This commit is contained in:
		
							parent
							
								
									f83f68207d
								
							
						
					
					
						commit
						faa9fe28f7
					
				@ -10,6 +10,7 @@ cmake_minimum_required(VERSION 3.23)
 | 
				
			|||||||
# Includes
 | 
					# Includes
 | 
				
			||||||
################################################################################
 | 
					################################################################################
 | 
				
			||||||
include("${CMAKE_SOURCE_DIR}/cmake/include/git_submodule.cmake")
 | 
					include("${CMAKE_SOURCE_DIR}/cmake/include/git_submodule.cmake")
 | 
				
			||||||
 | 
					include(CMakePackageConfigHelpers)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
################################################################################
 | 
					################################################################################
 | 
				
			||||||
# Constants
 | 
					# Constants
 | 
				
			||||||
@ -47,29 +48,19 @@ option(QTK_BUILD_GUI "Build the Qtk desktop application" ON)
 | 
				
			|||||||
# Options for bringing your own assimp installation; Otherwise not needed
 | 
					# Options for bringing your own assimp installation; Otherwise not needed
 | 
				
			||||||
# + If assimp is available system-wide we can just set QTK_UPDATE_SUBMODULES OFF
 | 
					# + If assimp is available system-wide we can just set QTK_UPDATE_SUBMODULES OFF
 | 
				
			||||||
option(ASSIMP_NEW_INTERFACE "Use the assimp::assimp interface (WIN / OSX)" OFF)
 | 
					option(ASSIMP_NEW_INTERFACE "Use the assimp::assimp interface (WIN / OSX)" OFF)
 | 
				
			||||||
message(STATUS
 | 
					message(STATUS "[Qtk] ASSIMP_NEW_INTERFACE=${ASSIMP_NEW_INTERFACE}")
 | 
				
			||||||
    "[Qtk] ASSIMP_NEW_INTERFACE=${ASSIMP_NEW_INTERFACE}"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
set(QT_DIR "$ENV{HOME}/Code/Clones/Qt/" CACHE PATH "Path to Qt6")
 | 
					set(QT_DIR "$ENV{HOME}/Code/Clones/Qt/" CACHE PATH "Path to Qt6")
 | 
				
			||||||
# Qt Designer will look in different locations if WIN / Unix.
 | 
					# Qt Designer will look in different locations if WIN / Unix.
 | 
				
			||||||
# These paths are for using Qt Designer integrated within Qt Creator.
 | 
					# These paths are for using Qt Designer integrated within Qt Creator.
 | 
				
			||||||
# Standalone Qt Designer may use different paths.
 | 
					# Standalone Qt Designer may use different paths.
 | 
				
			||||||
if (WIN32)
 | 
					if (WIN32)
 | 
				
			||||||
  set(QT_PLUGIN_INSTALL_DIR
 | 
					  # These paths may be different on windows. I have not tested this.
 | 
				
			||||||
      "${QT_DIR}/Tools/QtCreator/bin/plugins/designer"
 | 
					  set(QT_PLUGIN_INSTALL_DIR "${QT_DIR}/Tools/QtCreator/bin/plugins/designer")
 | 
				
			||||||
      )
 | 
					  set(QT_PLUGIN_LIBRARY_DIR "${QT_DIR}/Tools/QtCreator/lib/Qt/lib")
 | 
				
			||||||
  # This path may be different on windows. I have not tested this.
 | 
					 | 
				
			||||||
  set(QT_PLUGIN_LIBRARY_DIR
 | 
					 | 
				
			||||||
      "${QT_DIR}/Tools/QtCreator/lib/Qt/lib"
 | 
					 | 
				
			||||||
      )
 | 
					 | 
				
			||||||
else()
 | 
					else()
 | 
				
			||||||
  set(QT_PLUGIN_INSTALL_DIR
 | 
					  set(QT_PLUGIN_INSTALL_DIR "${QT_DIR}/Tools/QtCreator/lib/Qt/plugins/designer")
 | 
				
			||||||
      "${QT_DIR}/Tools/QtCreator/lib/Qt/plugins/designer"
 | 
					  set(QT_PLUGIN_LIBRARY_DIR "${QT_DIR}/Tools/QtCreator/lib/Qt/lib")
 | 
				
			||||||
      )
 | 
					 | 
				
			||||||
  set(QT_PLUGIN_LIBRARY_DIR
 | 
					 | 
				
			||||||
      "${QT_DIR}/Tools/QtCreator/lib/Qt/lib"
 | 
					 | 
				
			||||||
      )
 | 
					 | 
				
			||||||
endif()
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# This should be set to your Qt6 installation directory.
 | 
					# This should be set to your Qt6 installation directory.
 | 
				
			||||||
@ -80,9 +71,7 @@ list(APPEND CMAKE_PREFIX_PATH "${QT_INSTALL_DIR}")
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
set(QTK_PLUGIN_LIBRARY_DIR "${QT_PLUGIN_LIBRARY_DIR}")
 | 
					set(QTK_PLUGIN_LIBRARY_DIR "${QT_PLUGIN_LIBRARY_DIR}")
 | 
				
			||||||
set(QTK_PLUGIN_INSTALL_DIR "${QT_PLUGIN_INSTALL_DIR}")
 | 
					set(QTK_PLUGIN_INSTALL_DIR "${QT_PLUGIN_INSTALL_DIR}")
 | 
				
			||||||
set(QTK_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/install")
 | 
					message(STATUS "[Qtk] CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}")
 | 
				
			||||||
#set(QTK_INSTALL_PREFIX "${QT_INSTALL_DIR}")
 | 
					 | 
				
			||||||
#set(QTK_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
 | 
					 | 
				
			||||||
set(QTK_RESOURCES "${CMAKE_SOURCE_DIR}/resources")
 | 
					set(QTK_RESOURCES "${CMAKE_SOURCE_DIR}/resources")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Print all QTK options and their values.
 | 
					# Print all QTK options and their values.
 | 
				
			||||||
@ -99,12 +88,12 @@ endforeach()
 | 
				
			|||||||
# Find Qt
 | 
					# Find Qt
 | 
				
			||||||
find_package(Qt6 COMPONENTS Core UiPlugin OpenGLWidgets)
 | 
					find_package(Qt6 COMPONENTS Core UiPlugin OpenGLWidgets)
 | 
				
			||||||
if(NOT Qt6_FOUND)
 | 
					if(NOT Qt6_FOUND)
 | 
				
			||||||
  message(SEND_ERROR
 | 
					  message(
 | 
				
			||||||
      "[Qtk] Error: Unable to find Qt6 at CMAKE_PREFIX_PATH: "
 | 
					      SEND_ERROR "[Qtk] Error: Unable to find Qt6 at CMAKE_PREFIX_PATH: "
 | 
				
			||||||
      "${CMAKE_PREFIX_PATH}"
 | 
					      "${CMAKE_PREFIX_PATH}"
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
  message(FATAL_ERROR
 | 
					  message(
 | 
				
			||||||
      "[Qtk] Error: Specify path to Qt6 with `cmake "
 | 
					      FATAL_ERROR "[Qtk] Error: Specify path to Qt6 with `cmake "
 | 
				
			||||||
      "-DCMAKE_PREFIX_PATH=/path/to/Qt/6.x.x/gcc_64 -S /path/to/qtk -B "
 | 
					      "-DCMAKE_PREFIX_PATH=/path/to/Qt/6.x.x/gcc_64 -S /path/to/qtk -B "
 | 
				
			||||||
      "/path/to/qtk/build && cmake --build /path/to/qtk/build -j $(nprocs)`"
 | 
					      "/path/to/qtk/build && cmake --build /path/to/qtk/build -j $(nprocs)`"
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
@ -130,7 +119,8 @@ add_subdirectory(src)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
if(WIN32)
 | 
					if(WIN32)
 | 
				
			||||||
  get_target_property(_qt6_qmake_location Qt6::qmake IMPORTED_LOCATION)
 | 
					  get_target_property(_qt6_qmake_location Qt6::qmake IMPORTED_LOCATION)
 | 
				
			||||||
  execute_process(COMMAND "${_qt6_qmake_location}" -query QT_INSTALL_PREFIX
 | 
					  execute_process(
 | 
				
			||||||
 | 
					      COMMAND "${_qt6_qmake_location}" -query QT_INSTALL_PREFIX
 | 
				
			||||||
      RESULT_VARIABLE return_code
 | 
					      RESULT_VARIABLE return_code
 | 
				
			||||||
      OUTPUT_VARIABLE qt6_install_prefix
 | 
					      OUTPUT_VARIABLE qt6_install_prefix
 | 
				
			||||||
      OUTPUT_STRIP_TRAILING_WHITESPACE
 | 
					      OUTPUT_STRIP_TRAILING_WHITESPACE
 | 
				
			||||||
@ -138,7 +128,8 @@ if(WIN32)
 | 
				
			|||||||
  file(TO_NATIVE_PATH "${qt6_install_prefix}/bin" qt6_install_prefix)
 | 
					  file(TO_NATIVE_PATH "${qt6_install_prefix}/bin" qt6_install_prefix)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if(TARGET Qt6::windeployqt)
 | 
					  if(TARGET Qt6::windeployqt)
 | 
				
			||||||
    add_custom_command(TARGET qtk-main
 | 
					    add_custom_command(
 | 
				
			||||||
 | 
					        TARGET qtk-main
 | 
				
			||||||
        POST_BUILD
 | 
					        POST_BUILD
 | 
				
			||||||
        COMMAND set PATH=%PATH%$<SEMICOLON>${qt6_install_prefix}
 | 
					        COMMAND set PATH=%PATH%$<SEMICOLON>${qt6_install_prefix}
 | 
				
			||||||
        COMMAND Qt6::windeployqt --dir "${CMAKE_BINARY_DIR}/windeployqt" "$<TARGET_FILE_DIR:qtk-main>/$<TARGET_FILE_NAME:qtk-main>"
 | 
					        COMMAND Qt6::windeployqt --dir "${CMAKE_BINARY_DIR}/windeployqt" "$<TARGET_FILE_DIR:qtk-main>/$<TARGET_FILE_NAME:qtk-main>"
 | 
				
			||||||
@ -147,7 +138,7 @@ if(WIN32)
 | 
				
			|||||||
  endif()
 | 
					  endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if(MSVC AND TARGET Qt6::qmake)
 | 
					  if(MSVC AND TARGET Qt6::qmake)
 | 
				
			||||||
    set(VSUSER_FILE ${CMAKE_CURRENT_BINARY_DIR}/qtk-main.vcxproj.user)
 | 
					    set(VSUSER_FILE "${CMAKE_CURRENT_BINARY_DIR}/qtk-main.vcxproj.user")
 | 
				
			||||||
    file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/extern/assimp/assimp/bin" assimp_bin)
 | 
					    file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/extern/assimp/assimp/bin" assimp_bin)
 | 
				
			||||||
    file(WRITE ${VSUSER_FILE} "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
 | 
					    file(WRITE ${VSUSER_FILE} "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
 | 
				
			||||||
    file(APPEND ${VSUSER_FILE} "<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n")
 | 
					    file(APPEND ${VSUSER_FILE} "<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n")
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										6
									
								
								cmake/templates/Config.cmake.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								cmake/templates/Config.cmake.in
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					@PACKAGE_INIT@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					include("${CMAKE_CURRENT_LIST_DIR}/QtkTargets.cmake")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set_and_check(QTK_EXECUTABLE "${PACKAGE_PREFIX_DIR}/bin/qtk-main")
 | 
				
			||||||
 | 
					check_required_components(Qtk)
 | 
				
			||||||
@ -10,15 +10,34 @@ add_subdirectory(qtk)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Qtk Application
 | 
					# Qtk Application
 | 
				
			||||||
if (QTK_BUILD_GUI)
 | 
					if (QTK_BUILD_GUI)
 | 
				
			||||||
  #TODO: Use this to test local builds?
 | 
					 | 
				
			||||||
#  SET(CMAKE_INSTALL_RPATH "${QTK_INSTALL_PREFIX}/lib")
 | 
					 | 
				
			||||||
  add_subdirectory(app)
 | 
					  add_subdirectory(app)
 | 
				
			||||||
endif()
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					write_basic_package_version_file(
 | 
				
			||||||
 | 
					    "${CMAKE_CURRENT_BINARY_DIR}/QtkConfigVersion.cmake"
 | 
				
			||||||
 | 
					    COMPATIBILITY AnyNewerVersion
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					configure_package_config_file(
 | 
				
			||||||
 | 
					    "${CMAKE_SOURCE_DIR}/cmake/templates/Config.cmake.in"
 | 
				
			||||||
 | 
					    "${CMAKE_CURRENT_BINARY_DIR}/QtkConfig.cmake"
 | 
				
			||||||
 | 
					    INSTALL_DESTINATION lib/cmake/Qtk
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					install(
 | 
				
			||||||
 | 
					    FILES
 | 
				
			||||||
 | 
					      "${CMAKE_CURRENT_BINARY_DIR}/QtkConfig.cmake"
 | 
				
			||||||
 | 
					      "${CMAKE_CURRENT_BINARY_DIR}/QtkConfigVersion.cmake"
 | 
				
			||||||
 | 
					    DESTINATION lib/cmake/Qtk
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Install export
 | 
					# Install export
 | 
				
			||||||
install(EXPORT qtk-export
 | 
					install(
 | 
				
			||||||
 | 
					    EXPORT qtk-export
 | 
				
			||||||
    FILE QtkTargets.cmake
 | 
					    FILE QtkTargets.cmake
 | 
				
			||||||
    NAMESPACE Qtk::
 | 
					    NAMESPACE Qtk::
 | 
				
			||||||
    CONFIGURATIONS Debug|Release
 | 
					    DESTINATION lib/cmake/Qtk
 | 
				
			||||||
    DESTINATION ${QTK_INSTALL_PREFIX}/cmake
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
 | 
				
			||||||
 | 
					set(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}")
 | 
				
			||||||
 | 
					set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
 | 
				
			||||||
 | 
					include(CPack)
 | 
				
			||||||
 | 
				
			|||||||
@ -9,36 +9,41 @@
 | 
				
			|||||||
# Qtk Widget Library
 | 
					# Qtk Widget Library
 | 
				
			||||||
################################################################################
 | 
					################################################################################
 | 
				
			||||||
# Create a library of widgets used to build Qtk GUI
 | 
					# Create a library of widgets used to build Qtk GUI
 | 
				
			||||||
set(QTK_PLUGIN_LIBRARY_SOURCES
 | 
					set(
 | 
				
			||||||
 | 
					    QTK_PLUGIN_LIBRARY_SOURCES
 | 
				
			||||||
 | 
					    qtkwidget.cpp qtkwidget.h
 | 
				
			||||||
    debugconsole.cpp debugconsole.ui
 | 
					    debugconsole.cpp debugconsole.ui
 | 
				
			||||||
    toolbox.cpp toolbox.ui
 | 
					    toolbox.cpp toolbox.ui
 | 
				
			||||||
    treeview.cpp treeview.ui
 | 
					    treeview.cpp treeview.ui
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
set(QTK_PLUGIN_LIBRARY_HEADERS
 | 
					set(
 | 
				
			||||||
 | 
					    QTK_PLUGIN_LIBRARY_HEADERS
 | 
				
			||||||
    debugconsole.h
 | 
					    debugconsole.h
 | 
				
			||||||
    toolbox.h
 | 
					    toolbox.h
 | 
				
			||||||
    treeview.h
 | 
					    treeview.h
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
qt_add_library(qtk-plugin-library SHARED)
 | 
					qt_add_library(qtk-plugin-library SHARED)
 | 
				
			||||||
target_sources(qtk-plugin-library PRIVATE
 | 
					target_sources(
 | 
				
			||||||
    ${QTK_PLUGIN_LIBRARY_SOURCES}
 | 
					    qtk-plugin-library PRIVATE
 | 
				
			||||||
    ${QTK_PLUGIN_LIBRARY_HEADERS}
 | 
					    "${QTK_PLUGIN_LIBRARY_SOURCES}"
 | 
				
			||||||
 | 
					    "${QTK_PLUGIN_LIBRARY_HEADERS}"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
target_link_libraries(qtk-plugin-library PUBLIC Qt6::UiPlugin qtk-library)
 | 
					target_link_libraries(qtk-plugin-library PUBLIC Qt6::UiPlugin qtk-library)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
install(TARGETS qtk-plugin-library
 | 
					install(
 | 
				
			||||||
    EXPORT qtk-export
 | 
					    TARGETS qtk-plugin-library
 | 
				
			||||||
    BUNDLE DESTINATION ${QTK_INSTALL_PREFIX}/lib
 | 
					    BUNDLE DESTINATION lib
 | 
				
			||||||
    LIBRARY DESTINATION ${QTK_INSTALL_PREFIX}/lib
 | 
					    LIBRARY DESTINATION lib
 | 
				
			||||||
    ARCHIVE DESTINATION ${QTK_INSTALL_PREFIX}/lib/static
 | 
					    ARCHIVE DESTINATION lib/static
 | 
				
			||||||
    RUNTIME DESTINATION ${QTK_INSTALL_PREFIX}/bin
 | 
					    RUNTIME DESTINATION bin
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
install(TARGETS qtk-plugin-library
 | 
					install(
 | 
				
			||||||
    BUNDLE DESTINATION ${QTK_PLUGIN_LIBRARY_DIR}
 | 
					    TARGETS qtk-plugin-library
 | 
				
			||||||
    LIBRARY DESTINATION ${QTK_PLUGIN_LIBRARY_DIR}
 | 
					    BUNDLE DESTINATION "${QTK_PLUGIN_LIBRARY_DIR}"
 | 
				
			||||||
    RUNTIME DESTINATION ${QTK_PLUGIN_LIBRARY_DIR}
 | 
					    LIBRARY DESTINATION "${QTK_PLUGIN_LIBRARY_DIR}"
 | 
				
			||||||
    ARCHIVE DESTINATION ${QTK_PLUGIN_LIBRARY_DIR}
 | 
					    RUNTIME DESTINATION "${QTK_PLUGIN_LIBRARY_DIR}"
 | 
				
			||||||
 | 
					    ARCHIVE DESTINATION "${QTK_PLUGIN_LIBRARY_DIR}"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
################################################################################
 | 
					################################################################################
 | 
				
			||||||
@ -46,51 +51,54 @@ install(TARGETS qtk-plugin-library
 | 
				
			|||||||
################################################################################
 | 
					################################################################################
 | 
				
			||||||
# Create a Qt Designer plugin for a collection of widgets from our library.
 | 
					# Create a Qt Designer plugin for a collection of widgets from our library.
 | 
				
			||||||
qt_add_plugin(qtk-collection)
 | 
					qt_add_plugin(qtk-collection)
 | 
				
			||||||
target_sources(qtk-collection PRIVATE
 | 
					target_sources(
 | 
				
			||||||
 | 
					    qtk-collection PRIVATE
 | 
				
			||||||
    widgetplugincollection.cpp widgetplugincollection.h
 | 
					    widgetplugincollection.cpp widgetplugincollection.h
 | 
				
			||||||
    widgetplugin.cpp widgetplugin.h
 | 
					    widgetplugin.cpp widgetplugin.h
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
target_link_libraries(qtk-collection PUBLIC qtk-plugin-library)
 | 
					target_link_libraries(qtk-collection PUBLIC qtk-plugin-library)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
install(TARGETS qtk-collection
 | 
					install(
 | 
				
			||||||
    RUNTIME DESTINATION ${QTK_PLUGIN_INSTALL_DIR}
 | 
					    TARGETS qtk-collection
 | 
				
			||||||
    BUNDLE DESTINATION ${QTK_PLUGIN_INSTALL_DIR}
 | 
					    RUNTIME DESTINATION "${QTK_PLUGIN_INSTALL_DIR}"
 | 
				
			||||||
    LIBRARY DESTINATION ${QTK_PLUGIN_INSTALL_DIR}
 | 
					    BUNDLE DESTINATION "${QTK_PLUGIN_INSTALL_DIR}"
 | 
				
			||||||
 | 
					    LIBRARY DESTINATION "${QTK_PLUGIN_INSTALL_DIR}"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
################################################################################
 | 
					################################################################################
 | 
				
			||||||
# Final Qtk Application
 | 
					# Final Qtk Application
 | 
				
			||||||
################################################################################
 | 
					################################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set(QTK_APP_SOURCES
 | 
					set(
 | 
				
			||||||
    qtkwidget.cpp qtkwidget.h
 | 
					    QTK_APP_SOURCES
 | 
				
			||||||
    examplescene.cpp examplescene.h
 | 
					    examplescene.cpp examplescene.h
 | 
				
			||||||
    qtkmainwindow.cpp qtkmainwindow.ui
 | 
					    qtkmainwindow.cpp qtkmainwindow.ui
 | 
				
			||||||
    qtkmainwindow.h
 | 
					    qtkmainwindow.h
 | 
				
			||||||
    main.cpp
 | 
					    main.cpp
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
qt6_add_resources(QTK_APP_SOURCES ${CMAKE_SOURCE_DIR}/resources/resources.qrc)
 | 
					# TODO: Qtk library should not depend on these resources. (qtkapi.h)
 | 
				
			||||||
 | 
					#   Or should some resources be installed somewhere?
 | 
				
			||||||
 | 
					qt6_add_resources(QTK_APP_SOURCES "${QTK_RESOURCES}/resources.qrc")
 | 
				
			||||||
configure_file(
 | 
					configure_file(
 | 
				
			||||||
    "resources.h.in"
 | 
					    resources.h.in
 | 
				
			||||||
    "${CMAKE_CURRENT_BINARY_DIR}/resources.h"
 | 
					    "${CMAKE_CURRENT_BINARY_DIR}/resources.h"
 | 
				
			||||||
    @ONLY
 | 
					    @ONLY
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
qt_add_executable(qtk-main ${QTK_APP_SOURCES})
 | 
					qt_add_executable(qtk-main ${QTK_APP_SOURCES})
 | 
				
			||||||
# Link qtk-main executable to main qtk-library library
 | 
					 | 
				
			||||||
target_link_libraries(qtk-main PRIVATE qtk-plugin-library)
 | 
					target_link_libraries(qtk-main PRIVATE qtk-plugin-library)
 | 
				
			||||||
target_include_directories(qtk-main PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
set_target_properties(qtk-main PROPERTIES
 | 
					set_target_properties(
 | 
				
			||||||
 | 
					    qtk-main PROPERTIES
 | 
				
			||||||
    WIN32_EXECUTABLE TRUE
 | 
					    WIN32_EXECUTABLE TRUE
 | 
				
			||||||
    MACOSX_BUNDLE TRUE
 | 
					    MACOSX_BUNDLE TRUE
 | 
				
			||||||
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
 | 
					    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
 | 
				
			||||||
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
 | 
					    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# TODO: Fix install for qtk-main unable to find so files
 | 
					install(
 | 
				
			||||||
install(TARGETS qtk-main
 | 
					    TARGETS qtk-main
 | 
				
			||||||
    BUNDLE DESTINATION ${QTK_INSTALL_PREFIX}/bin
 | 
					    BUNDLE DESTINATION bin
 | 
				
			||||||
    RUNTIME DESTINATION ${QTK_INSTALL_PREFIX}/bin
 | 
					    RUNTIME DESTINATION bin
 | 
				
			||||||
    LIBRARY DESTINATION ${QTK_INSTALL_PREFIX}/bin/lib
 | 
					    LIBRARY DESTINATION bin/lib
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										59
									
								
								src/example-client/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								src/example-client/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,59 @@
 | 
				
			|||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					## Example client project using qtk                                           ##
 | 
				
			||||||
 | 
					##                                                                            ##
 | 
				
			||||||
 | 
					## Author: Shaun Reed | Contact: shaunrd0@gmail.com | URL: www.shaunreed.com  ##
 | 
				
			||||||
 | 
					## All Content (c) 2023 Shaun Reed, all rights reserved                       ##
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					cmake_minimum_required(VERSION 3.23)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Constants
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					set(CMAKE_INCLUDE_CURRENT_DIR ON)
 | 
				
			||||||
 | 
					set(CMAKE_AUTOMOC ON)
 | 
				
			||||||
 | 
					set(CMAKE_AUTORCC ON)
 | 
				
			||||||
 | 
					set(CMAKE_CXX_STANDARD 17)
 | 
				
			||||||
 | 
					set(CMAKE_CXX_STANDARD_REQUIRED ON)
 | 
				
			||||||
 | 
					set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
 | 
				
			||||||
 | 
					  add_compile_options(/wd4131 /wd4127)
 | 
				
			||||||
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Project
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					project(
 | 
				
			||||||
 | 
					    #[[NAME]]   QtkClient
 | 
				
			||||||
 | 
					    VERSION     1.0
 | 
				
			||||||
 | 
					    DESCRIPTION "An example project using Qtk"
 | 
				
			||||||
 | 
					    LANGUAGES   CXX C
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If you did not install Qtk on a system path, point cmake to installation.
 | 
				
			||||||
 | 
					#list(APPEND CMAKE_PREFIX_PATH /home/shaun/Code/qtk/install)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					find_package(Qtk 1.0 REQUIRED)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Print all QTK variables
 | 
				
			||||||
 | 
					get_cmake_property(VAR_NAMES VARIABLES)
 | 
				
			||||||
 | 
					list(FILTER VAR_NAMES INCLUDE REGEX "^QTK_.*$")
 | 
				
			||||||
 | 
					list(SORT VAR_NAMES)
 | 
				
			||||||
 | 
					foreach(VAR_NAME ${VAR_NAMES})
 | 
				
			||||||
 | 
					  message(STATUS "[Qtk] ${VAR_NAME}=${${VAR_NAME}}")
 | 
				
			||||||
 | 
					endforeach()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set(QT_INSTALL_DIR "/home/kapper/Code/Clones/Qt/6.3.1/gcc_64/" CACHE PATH "Path to Qt6 install")
 | 
				
			||||||
 | 
					list(APPEND CMAKE_PREFIX_PATH "${QT_INSTALL_DIR}")
 | 
				
			||||||
 | 
					find_package(Qt6 COMPONENTS Core Widgets OpenGLWidgets REQUIRED)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set(EXAMPLE_SOURCES
 | 
				
			||||||
 | 
					    main.cpp
 | 
				
			||||||
 | 
					    examplescene.cpp examplescene.h
 | 
				
			||||||
 | 
					    examplewidget.cpp examplewidget.h
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					qt_add_resources(EXAMPLE_SOURCES ../../resources/resources.qrc)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					add_executable(example ${EXAMPLE_SOURCES})
 | 
				
			||||||
 | 
					target_link_libraries(example PUBLIC Qt6::Widgets Qt6::OpenGLWidgets Qt6::Core)
 | 
				
			||||||
 | 
					target_link_libraries(example PUBLIC Qtk::qtk-library)
 | 
				
			||||||
							
								
								
									
										89
									
								
								src/example-client/examplescene.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								src/example-client/examplescene.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,89 @@
 | 
				
			|||||||
 | 
					/*##############################################################################
 | 
				
			||||||
 | 
					## Author: Shaun Reed                                                         ##
 | 
				
			||||||
 | 
					## Legal: All Content (c) 2023 Shaun Reed, all rights reserved                ##
 | 
				
			||||||
 | 
					## About: Example Qtk scene                                                   ##
 | 
				
			||||||
 | 
					##                                                                            ##
 | 
				
			||||||
 | 
					## Contact: shaunrd0@gmail.com  | URL: www.shaunreed.com | GitHub: shaunrd0   ##
 | 
				
			||||||
 | 
					##############################################################################*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "examplescene.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using namespace Qtk;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ExampleScene::ExampleScene() {
 | 
				
			||||||
 | 
					  setSceneName("Example Scene");
 | 
				
			||||||
 | 
					  getCamera().getTransform().setTranslation(-8.0f, 0.0f, 10.0f);
 | 
				
			||||||
 | 
					  getCamera().getTransform().setRotation(-5.0f, 0.0f, 1.0f, 0.0f);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ExampleScene::~ExampleScene() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ExampleScene::init() {
 | 
				
			||||||
 | 
					  auto skybox = new Qtk::Skybox("Skybox");
 | 
				
			||||||
 | 
					  setSkybox(skybox);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  auto mesh = addObject(
 | 
				
			||||||
 | 
					      new Qtk::MeshRenderer("rightTriangle", Triangle(QTK_DRAW_ELEMENTS)));
 | 
				
			||||||
 | 
					  mesh->getTransform().setTranslation(-5.0f, 0.0f, -2.0f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  addObject(new Qtk::MeshRenderer("centerCube", Cube(QTK_DRAW_ELEMENTS)))
 | 
				
			||||||
 | 
					      ->getTransform()
 | 
				
			||||||
 | 
					      .setTranslation(-7.0f, 0.0f, -2.0f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  mesh = addObject(
 | 
				
			||||||
 | 
					      new Qtk::MeshRenderer("leftTriangle", Triangle(QTK_DRAW_ELEMENTS)));
 | 
				
			||||||
 | 
					  mesh->getTransform().setTranslation(-9.0f, 0.0f, -2.0f);
 | 
				
			||||||
 | 
					  mesh->setDrawType(GL_LINE_LOOP);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  mesh = addObject(
 | 
				
			||||||
 | 
					      new Qtk::MeshRenderer("topTriangle", Triangle(QTK_DRAW_ELEMENTS)));
 | 
				
			||||||
 | 
					  mesh->getTransform().setTranslation(-7.0f, 2.0f, -2.0f);
 | 
				
			||||||
 | 
					  mesh->getTransform().scale(0.25f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  mesh = addObject(
 | 
				
			||||||
 | 
					      new Qtk::MeshRenderer("bottomTriangle", Triangle(QTK_DRAW_ELEMENTS)));
 | 
				
			||||||
 | 
					  mesh->getTransform().setTranslation(-7.0f, -2.0f, -2.0f);
 | 
				
			||||||
 | 
					  mesh->getTransform().scale(0.25f);
 | 
				
			||||||
 | 
					  mesh->setDrawType(GL_LINE_LOOP);
 | 
				
			||||||
 | 
					  mesh->setColor(GREEN);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ExampleScene::draw() {
 | 
				
			||||||
 | 
					  Scene::draw();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ExampleScene::update() {
 | 
				
			||||||
 | 
					  // Pitch forward and roll sideways
 | 
				
			||||||
 | 
					  MeshRenderer::getInstance("leftTriangle")
 | 
				
			||||||
 | 
					      ->getTransform()
 | 
				
			||||||
 | 
					      .rotate(0.75f, 1.0f, 0.0f, 0.0f);
 | 
				
			||||||
 | 
					  MeshRenderer::getInstance("rightTriangle")
 | 
				
			||||||
 | 
					      ->getTransform()
 | 
				
			||||||
 | 
					      .rotate(0.75f, 0.0f, 0.0f, 1.0f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static float translateX = 0.025f;
 | 
				
			||||||
 | 
					  float limit = -9.0f;  // Origin position.x - 2.0f
 | 
				
			||||||
 | 
					  float posX = MeshRenderer::getInstance("topTriangle")
 | 
				
			||||||
 | 
					                   ->getTransform()
 | 
				
			||||||
 | 
					                   .getTranslation()
 | 
				
			||||||
 | 
					                   .x();
 | 
				
			||||||
 | 
					  if(posX < limit || posX > limit + 4.0f) {
 | 
				
			||||||
 | 
					    translateX = -translateX;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  MeshRenderer::getInstance("topTriangle")
 | 
				
			||||||
 | 
					      ->getTransform()
 | 
				
			||||||
 | 
					      .translate(translateX, 0.0f, 0.0f);
 | 
				
			||||||
 | 
					  MeshRenderer::getInstance("bottomTriangle")
 | 
				
			||||||
 | 
					      ->getTransform()
 | 
				
			||||||
 | 
					      .translate(-translateX, 0.0f, 0.0f);
 | 
				
			||||||
 | 
					  MeshRenderer::getInstance("topTriangle")
 | 
				
			||||||
 | 
					      ->getTransform()
 | 
				
			||||||
 | 
					      .rotate(0.75f, 0.2f, 0.0f, 0.4f);
 | 
				
			||||||
 | 
					  MeshRenderer::getInstance("bottomTriangle")
 | 
				
			||||||
 | 
					      ->getTransform()
 | 
				
			||||||
 | 
					      .rotate(0.75f, 0.0f, 0.2f, 0.4f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  MeshRenderer::getInstance("centerCube")
 | 
				
			||||||
 | 
					      ->getTransform()
 | 
				
			||||||
 | 
					      .rotate(0.75f, 0.2f, 0.4f, 0.6f);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										27
									
								
								src/example-client/examplescene.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/example-client/examplescene.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					/*##############################################################################
 | 
				
			||||||
 | 
					## Author: Shaun Reed                                                         ##
 | 
				
			||||||
 | 
					## Legal: All Content (c) 2023 Shaun Reed, all rights reserved                ##
 | 
				
			||||||
 | 
					## About: Example Qtk scene                                                   ##
 | 
				
			||||||
 | 
					##                                                                            ##
 | 
				
			||||||
 | 
					## Contact: shaunrd0@gmail.com  | URL: www.shaunreed.com | GitHub: shaunrd0   ##
 | 
				
			||||||
 | 
					##############################################################################*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef QTK_EXAMPLE_SCENE_H
 | 
				
			||||||
 | 
					#define QTK_EXAMPLE_SCENE_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <qtk/scene.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ExampleScene : public Qtk::Scene {
 | 
				
			||||||
 | 
					  public:
 | 
				
			||||||
 | 
					    ExampleScene();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ~ExampleScene();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void init() override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void draw() override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void update() override;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif  // QTK_EXAMPLE_SCENE_H
 | 
				
			||||||
							
								
								
									
										52
									
								
								src/example-client/examplewidget.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								src/example-client/examplewidget.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,52 @@
 | 
				
			|||||||
 | 
					/*##############################################################################
 | 
				
			||||||
 | 
					## Author: Shaun Reed                                                         ##
 | 
				
			||||||
 | 
					## Legal: All Content (c) 2023 Shaun Reed, all rights reserved                ##
 | 
				
			||||||
 | 
					## About: Example Qtk widget                                                  ##
 | 
				
			||||||
 | 
					##                                                                            ##
 | 
				
			||||||
 | 
					## Contact: shaunrd0@gmail.com  | URL: www.shaunreed.com | GitHub: shaunrd0   ##
 | 
				
			||||||
 | 
					##############################################################################*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <qtk/scene.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "examplewidget.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ExampleWidget::ExampleWidget(QWidget * parent) :
 | 
				
			||||||
 | 
					    QOpenGLWidget(parent), mScene(new ExampleScene) {
 | 
				
			||||||
 | 
					   QSurfaceFormat format;
 | 
				
			||||||
 | 
					  format.setRenderableType(QSurfaceFormat::OpenGL);
 | 
				
			||||||
 | 
					  format.setProfile(QSurfaceFormat::CoreProfile);
 | 
				
			||||||
 | 
					  format.setVersion(4, 6);
 | 
				
			||||||
 | 
					  format.setSamples(4);
 | 
				
			||||||
 | 
					  format.setDepthBufferSize(16);
 | 
				
			||||||
 | 
					  setFormat(format);
 | 
				
			||||||
 | 
					  setFocusPolicy(Qt::ClickFocus);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ExampleWidget::initializeGL() {
 | 
				
			||||||
 | 
					  initializeOpenGLFunctions();
 | 
				
			||||||
 | 
					  connect(this, SIGNAL(frameSwapped()), this, SLOT(update()));
 | 
				
			||||||
 | 
					  glEnable(GL_MULTISAMPLE);
 | 
				
			||||||
 | 
					  glEnable(GL_DEPTH_TEST);
 | 
				
			||||||
 | 
					  glDepthMask(GL_TRUE);
 | 
				
			||||||
 | 
					  glDepthFunc(GL_LEQUAL);
 | 
				
			||||||
 | 
					  glDepthRange(0.1f, 1.0f);
 | 
				
			||||||
 | 
					  glClearDepth(1.0f);
 | 
				
			||||||
 | 
					  glClearColor(0.0f, 0.25f, 0.0f, 0.0f);
 | 
				
			||||||
 | 
					  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ExampleWidget::resizeGL(int width, int height) {
 | 
				
			||||||
 | 
					  Qtk::Scene::getProjectionMatrix().setToIdentity();
 | 
				
			||||||
 | 
					  Qtk::Scene::getProjectionMatrix().perspective(
 | 
				
			||||||
 | 
					      45.0f, float(width) / float(height), 0.1f, 1000.0f);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ExampleWidget::paintGL() {
 | 
				
			||||||
 | 
					  glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
 | 
				
			||||||
 | 
					  mScene->draw();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ExampleWidget::update() {
 | 
				
			||||||
 | 
					  mScene->update();
 | 
				
			||||||
 | 
					  QWidget::update();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										38
									
								
								src/example-client/examplewidget.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/example-client/examplewidget.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					/*##############################################################################
 | 
				
			||||||
 | 
					## Author: Shaun Reed                                                         ##
 | 
				
			||||||
 | 
					## Legal: All Content (c) 2023 Shaun Reed, all rights reserved                ##
 | 
				
			||||||
 | 
					## About: Example Qtk widget                                                  ##
 | 
				
			||||||
 | 
					##                                                                            ##
 | 
				
			||||||
 | 
					## Contact: shaunrd0@gmail.com  | URL: www.shaunreed.com | GitHub: shaunrd0   ##
 | 
				
			||||||
 | 
					##############################################################################*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef QTKCLIENT_EXAMPLEWIDGET_H
 | 
				
			||||||
 | 
					#define QTKCLIENT_EXAMPLEWIDGET_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <QOpenGLFunctions>
 | 
				
			||||||
 | 
					#include <QOpenGLWidget>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "examplescene.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ExampleWidget : public QOpenGLWidget, protected QOpenGLFunctions {
 | 
				
			||||||
 | 
					    Q_OBJECT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public:
 | 
				
			||||||
 | 
					    explicit ExampleWidget(QWidget * parent = nullptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ~ExampleWidget() = default;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void initializeGL() override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void resizeGL(int width, int height) override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void paintGL() override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected slots:
 | 
				
			||||||
 | 
					    void update();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private:
 | 
				
			||||||
 | 
					    ExampleScene * mScene;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif  // QTKCLIENT_EXAMPLEWIDGET_H
 | 
				
			||||||
							
								
								
									
										22
									
								
								src/example-client/main.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/example-client/main.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					/*##############################################################################
 | 
				
			||||||
 | 
					## Author: Shaun Reed                                                         ##
 | 
				
			||||||
 | 
					## Legal: All Content (c) 2023 Shaun Reed, all rights reserved                ##
 | 
				
			||||||
 | 
					## About: Example Qt desktop application using Qtk                            ##
 | 
				
			||||||
 | 
					##                                                                            ##
 | 
				
			||||||
 | 
					## Contact: shaunrd0@gmail.com  | URL: www.shaunreed.com | GitHub: shaunrd0   ##
 | 
				
			||||||
 | 
					##############################################################################*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <QApplication>
 | 
				
			||||||
 | 
					#include <QMainWindow>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "examplewidget.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main(int argc, char * argv[]) {
 | 
				
			||||||
 | 
					  QApplication app(argc, argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  auto window = new QMainWindow;
 | 
				
			||||||
 | 
					  window->setCentralWidget(new ExampleWidget);
 | 
				
			||||||
 | 
					  window->show();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  app.exec();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -8,7 +8,8 @@
 | 
				
			|||||||
################################################################################
 | 
					################################################################################
 | 
				
			||||||
# Qtk Library
 | 
					# Qtk Library
 | 
				
			||||||
################################################################################
 | 
					################################################################################
 | 
				
			||||||
set(PUBLIC_HEADERS
 | 
					set(
 | 
				
			||||||
 | 
					    QTK_LIBRARY_PUBLIC_HEADERS
 | 
				
			||||||
    camera3d.h
 | 
					    camera3d.h
 | 
				
			||||||
    input.h
 | 
					    input.h
 | 
				
			||||||
    shape.h
 | 
					    shape.h
 | 
				
			||||||
@ -23,7 +24,8 @@ set(PUBLIC_HEADERS
 | 
				
			|||||||
    transform3D.h
 | 
					    transform3D.h
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set(SOURCE_FILES
 | 
					set(
 | 
				
			||||||
 | 
					    QTK_LIBRARY_SOURCES
 | 
				
			||||||
    camera3d.cpp
 | 
					    camera3d.cpp
 | 
				
			||||||
    input.cpp
 | 
					    input.cpp
 | 
				
			||||||
    shape.cpp
 | 
					    shape.cpp
 | 
				
			||||||
@ -37,12 +39,14 @@ set(SOURCE_FILES
 | 
				
			|||||||
    transform3D.cpp
 | 
					    transform3D.cpp
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
qt_add_library(qtk-library SHARED)
 | 
					qt6_add_resources(QTK_LIBRARY_SOURCES "${QTK_RESOURCES}/resources.qrc")
 | 
				
			||||||
target_sources(qtk-library PRIVATE ${SOURCE_FILES})
 | 
					qt_add_library(qtk-library STATIC)
 | 
				
			||||||
target_sources(qtk-library PUBLIC
 | 
					target_sources(qtk-library PRIVATE ${QTK_LIBRARY_SOURCES})
 | 
				
			||||||
 | 
					target_sources(
 | 
				
			||||||
 | 
					    qtk-library PUBLIC
 | 
				
			||||||
    FILE_SET HEADERS
 | 
					    FILE_SET HEADERS
 | 
				
			||||||
    BASE_DIRS ${CMAKE_SOURCE_DIR}/src
 | 
					      BASE_DIRS "${CMAKE_SOURCE_DIR}/src"
 | 
				
			||||||
    FILES ${PUBLIC_HEADERS}
 | 
					      FILES ${QTK_LIBRARY_PUBLIC_HEADERS}
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(QTK_DEBUG)
 | 
					if(QTK_DEBUG)
 | 
				
			||||||
@ -52,13 +56,15 @@ if(QTK_SHARED)
 | 
				
			|||||||
  target_compile_definitions(qtk-library PUBLIC QTK_SHARED)
 | 
					  target_compile_definitions(qtk-library PUBLIC QTK_SHARED)
 | 
				
			||||||
endif()
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set_target_properties(qtk-library PROPERTIES
 | 
					set_target_properties(
 | 
				
			||||||
 | 
					    qtk-library PROPERTIES
 | 
				
			||||||
    WIN32_EXECUTABLE TRUE
 | 
					    WIN32_EXECUTABLE TRUE
 | 
				
			||||||
    MACOSX_BUNDLE TRUE
 | 
					    MACOSX_BUNDLE TRUE
 | 
				
			||||||
    VERSION ${PROJECT_VERSION}
 | 
					    VERSION ${PROJECT_VERSION}
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
target_link_libraries(qtk-library PUBLIC
 | 
					target_link_libraries(
 | 
				
			||||||
 | 
					    qtk-library PUBLIC
 | 
				
			||||||
    Qt6::Core Qt6::OpenGLWidgets Qt6::Widgets
 | 
					    Qt6::Core Qt6::OpenGLWidgets Qt6::Widgets
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -73,21 +79,23 @@ if(WIN32)
 | 
				
			|||||||
endif()
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# System install for qtk-library
 | 
					# System install for qtk-library
 | 
				
			||||||
# TODO: Use RUNTIME_DEPENDENCY_SET to install Qt libraries for local builds?
 | 
					install(
 | 
				
			||||||
install(TARGETS qtk-library
 | 
					    TARGETS qtk-library
 | 
				
			||||||
    # Associate qtk-library target with qtk-export
 | 
					    # Associate qtk-library target with qtk-export
 | 
				
			||||||
    EXPORT qtk-export
 | 
					    EXPORT qtk-export
 | 
				
			||||||
    FILE_SET HEADERS DESTINATION "${QTK_INSTALL_PREFIX}/include"
 | 
					    FILE_SET HEADERS DESTINATION include
 | 
				
			||||||
    BUNDLE DESTINATION ${QTK_INSTALL_PREFIX}/lib
 | 
					    BUNDLE DESTINATION lib
 | 
				
			||||||
    LIBRARY DESTINATION ${QTK_INSTALL_PREFIX}/lib
 | 
					    LIBRARY DESTINATION lib
 | 
				
			||||||
    ARCHIVE DESTINATION ${QTK_INSTALL_PREFIX}/lib/static
 | 
					    ARCHIVE DESTINATION lib/static
 | 
				
			||||||
    RUNTIME DESTINATION ${QTK_INSTALL_PREFIX}/bin
 | 
					    RUNTIME DESTINATION bin
 | 
				
			||||||
 | 
					    INCLUDES DESTINATION include
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Install qtk-library to Qt Designer to support widget plugins.
 | 
					## Install qtk-library to Qt Designer to support widget plugins.
 | 
				
			||||||
install(TARGETS qtk-library
 | 
					install(
 | 
				
			||||||
    BUNDLE DESTINATION ${QTK_PLUGIN_LIBRARY_DIR}
 | 
					    TARGETS qtk-library
 | 
				
			||||||
    LIBRARY DESTINATION ${QTK_PLUGIN_LIBRARY_DIR}
 | 
					    BUNDLE DESTINATION "${QTK_PLUGIN_LIBRARY_DIR}"
 | 
				
			||||||
    ARCHIVE DESTINATION ${QTK_PLUGIN_LIBRARY_DIR}
 | 
					    LIBRARY DESTINATION "${QTK_PLUGIN_LIBRARY_DIR}"
 | 
				
			||||||
    RUNTIME DESTINATION ${QTK_PLUGIN_LIBRARY_DIR}
 | 
					    ARCHIVE DESTINATION "${QTK_PLUGIN_LIBRARY_DIR}"
 | 
				
			||||||
 | 
					    RUNTIME DESTINATION "${QTK_PLUGIN_LIBRARY_DIR}"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user