added support for python plugin

moved C++ project stuff into cpp.cmake
This commit is contained in:
isanae
2020-04-24 21:39:29 -04:00
parent f167256564
commit b2a7bf8711
10 changed files with 383 additions and 160 deletions
+161
View File
@@ -0,0 +1,161 @@
macro(do_cpp_project)
set(Boost_USE_STATIC_RUNTIME OFF)
set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1)
set(CMAKE_INSTALL_MESSAGE NEVER)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5QuickWidgets REQUIRED)
find_package(Qt5Quick REQUIRED)
find_package(Qt5Network REQUIRED)
find_package(Qt5WinExtras REQUIRED)
find_package(Qt5WebEngineWidgets REQUIRED)
find_package(Qt5WebSockets REQUIRED)
find_package(Qt5Qml REQUIRED)
find_package(Qt5LinguistTools)
find_package(zlib REQUIRED)
find_package(Boost REQUIRED COMPONENTS thread)
find_package(fmt REQUIRED)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(GLOBAL PROPERTY AUTOGEN_SOURCE_GROUP autogen)
set_property(GLOBAL PROPERTY AUTOMOC_SOURCE_GROUP autogen)
set_property(GLOBAL PROPERTY AUTORCC_SOURCE_GROUP autogen)
execute_process(
COMMAND git log -1 --format=%h
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_COMMIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
add_compile_definitions(
_UNICODE
UNICODE
NOMINMAX
_CRT_SECURE_NO_WARNINGS
BOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE
_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING
QT_MESSAGELOGCONTEXT
GITID="${GIT_COMMIT_HASH}")
set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" PROPERTY
VS_STARTUP_PROJECT ${CMAKE_PROJECT_NAME})
endmacro()
macro(cpp_pre_target)
if(${create_translations})
qt5_create_translation(
qm_files
${CMAKE_SOURCE_DIR}/src ${additional_translations}
${CMAKE_SOURCE_DIR}/src/${CMAKE_PROJECT_NAME}_en.ts
OPTIONS -silent
)
endif()
file(GLOB_RECURSE source_files CONFIGURE_DEPENDS *.cpp)
file(GLOB_RECURSE header_files CONFIGURE_DEPENDS *.h)
file(GLOB_RECURSE qrc_files CONFIGURE_DEPENDS *.qrc)
file(GLOB_RECURSE rc_files CONFIGURE_DEPENDS *.rc)
file(GLOB_RECURSE rule_files CONFIGURE_DEPENDS ${CMAKE_BINARY_DIR}/*.rule)
file(GLOB_RECURSE misc_files CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/../*.natvis)
set(input_files
${source_files}
${header_files}
${qrc_files}
${rc_files}
${misc_files}
${qm_files})
# this needs to happen before the include() below because they're only used
# when creating the target
link_directories(
${modorganizer_install_lib_path}
${Boost_LIBRARY_DIRS}
${LZ4_ROOT}/bin
${ZLIB_ROOT}/lib
)
endmacro()
macro(cpp_post_target)
# this needs to happen after the include() above because they rely on the
# target being created
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
${Boost_INCLUDE_DIRS}
${SPDLOG_ROOT}/include
${SEVENZ_ROOT}/CPP
${ZLIB_INCLUDE_DIRS}
${LZ4_ROOT}/lib
)
source_group(src REGULAR_EXPRESSION ".*\\.(h|cpp|ui)")
source_group(cmake FILES CMakeLists.txt)
source_group(autogen FILES ${rule_files} ${qm_files})
source_group(autogen REGULAR_EXPRESSION ".*\\cmake_pch.*")
source_group(resources FILES ${rc_files} ${qrc_files})
if(EXISTS ${CMAKE_SOURCE_DIR}/src/pch.h)
target_precompile_headers(${CMAKE_PROJECT_NAME}
PRIVATE ${CMAKE_SOURCE_DIR}/src/pch.h)
endif()
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
COMPILE_FLAGS "${COMPILE_FLAGS}")
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
COMPILE_FLAGS_RELWITHDEBINFO "${OPTIMIZE_COMPILE_FLAGS}")
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
LINK_FLAGS_RELWITHDEBINFO "${OPTIMIZE_LINK_FLAGS}")
target_link_libraries(${CMAKE_PROJECT_NAME}
Qt5::Widgets
Qt5::WinExtras
Qt5::WebEngineWidgets
Qt5::Quick
Qt5::Qml
Qt5::QuickWidgets
Qt5::Network
Qt5::WebSockets
fmt::fmt
liblz4 zlibstatic
${Boost_LIBRARIES}
Dbghelp Version Shlwapi
)
if(NOT ${CMAKE_PROJECT_NAME} STREQUAL "uibase")
requires_project("uibase")
endif()
endmacro()
function(add_filter)
cmake_parse_arguments(PARSE_ARGV 0 add_filter "" "NAME" "FILES;GROUPS")
set(files ${add_filter_FILES})
foreach(f ${add_filter_GROUPS})
set(files ${files} ${f}.cpp ${f}.h ${f}.inc ${f}.ui)
endforeach()
string(REPLACE "/" "\\" filter_name ${add_filter_NAME})
source_group(${filter_name} FILES ${files})
endfunction()
function(requires_project)
cmake_parse_arguments(PARSE_ARGV 0 requires "" "" "")
foreach(project_name ${requires_UNPARSED_ARGUMENTS})
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
${modorganizer_super_path}/${project_name}/src)
target_link_libraries(${CMAKE_PROJECT_NAME} ${project_name})
endforeach()
endfunction()
+18 -6
View File
@@ -1,10 +1,22 @@
cmake_minimum_required(VERSION 3.16)
include(${CMAKE_CURRENT_LIST_DIR}/cpp.cmake)
add_library(${CMAKE_PROJECT_NAME} SHARED ${input_files})
macro(do_project)
do_cpp_project()
endmacro()
install(TARGETS ${CMAKE_PROJECT_NAME}
RUNTIME DESTINATION bin
ARCHIVE DESTINATION libs)
install(FILES $<TARGET_PDB_FILE:${CMAKE_PROJECT_NAME}>
DESTINATION pdb)
macro(do_src)
cpp_pre_target()
add_library(${CMAKE_PROJECT_NAME} SHARED ${input_files})
install(TARGETS ${CMAKE_PROJECT_NAME}
RUNTIME DESTINATION bin
ARCHIVE DESTINATION libs)
install(FILES $<TARGET_PDB_FILE:${CMAKE_PROJECT_NAME}>
DESTINATION pdb)
cpp_post_target()
endmacro()
+20 -8
View File
@@ -1,4 +1,5 @@
cmake_minimum_required(VERSION 3.16)
include(${CMAKE_CURRENT_LIST_DIR}/cpp.cmake)
function(set_project_to_run_from_install)
set(vcxproj_user_file "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}.vcxproj.user")
@@ -57,13 +58,24 @@ function(deploy_qt)
endfunction()
add_executable(${CMAKE_PROJECT_NAME} WIN32 ${input_files})
set_project_to_run_from_install()
macro(do_project)
do_cpp_project()
endmacro()
if(DEFINED executable_name)
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
OUTPUT_NAME ${executable_name})
endif()
install(TARGETS ${CMAKE_PROJECT_NAME} RUNTIME DESTINATION bin)
install(FILES $<TARGET_PDB_FILE:${CMAKE_PROJECT_NAME}> DESTINATION pdb)
macro(do_src)
cpp_pre_target()
add_executable(${CMAKE_PROJECT_NAME} WIN32 ${input_files})
set_project_to_run_from_install()
if(DEFINED executable_name)
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
OUTPUT_NAME ${executable_name})
endif()
cpp_post_target()
install(TARGETS ${CMAKE_PROJECT_NAME} RUNTIME DESTINATION bin)
install(FILES $<TARGET_PDB_FILE:${CMAKE_PROJECT_NAME}> DESTINATION pdb)
endmacro()
+87
View File
@@ -0,0 +1,87 @@
# This is a modified version of Qt5LinguistToolsMacros.cmake which calls
# pylupdate5 instead of lupdate, allowing Python strings to be extracted,
# too. It still requires the Qt version of the file to be included, but
# only this version of the function needs to be called. You also need to
# have PYTHON_ROOT set to a directory where a working pylupdate5.bat can
# be found. If you aren't using Windows, your platform's equivalent may
# work, too.
#=============================================================================
# Copyright 2005-2011 Kitware, Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# * Neither the name of Kitware, Inc. nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#=============================================================================
include(CMakeParseArguments)
function(PYQT5_CREATE_TRANSLATION _qm_files)
set(options)
set(oneValueArgs)
set(multiValueArgs OPTIONS)
cmake_parse_arguments(_LUPDATE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
set(_lupdate_files ${_LUPDATE_UNPARSED_ARGUMENTS})
set(_lupdate_options ${_LUPDATE_OPTIONS})
set(_my_sources)
set(_my_tsfiles)
foreach(_file ${_lupdate_files})
get_filename_component(_ext ${_file} EXT)
get_filename_component(_abs_FILE ${_file} ABSOLUTE)
if(_ext MATCHES "ts")
list(APPEND _my_tsfiles ${_abs_FILE})
else()
list(APPEND _my_sources ${_abs_FILE})
endif()
endforeach()
foreach(_ts_file ${_my_tsfiles})
set(_lst_file_srcs)
if(_my_sources)
# Qt made a file listing all sources and used that as an argument, but pylupdate5 doesn't support that.
# Qt allowed directories to be listed as sources, but pylupdate5 requires their contents to be listed.
get_filename_component(_ts_name ${_ts_file} NAME_WE)
foreach(_lst_file_src ${_my_sources})
if(IS_DIRECTORY ${_lst_file_src})
file(GLOB _directory_contents ${_lst_file_src}/*.py ${_lst_file_src}/*.ui)
list(APPEND _lst_file_srcs ${_directory_contents})
else()
list(APPEND _lst_file_srcs ${_lst_file_src})
endif()
endforeach()
endif()
add_custom_command(OUTPUT ${_ts_file}
COMMAND ${PYTHON_ROOT}/PCbuild/amd64/python.exe
ARGS -m PyQt5.pylupdate_main ${_lupdate_options} ${_lst_file_srcs} -ts ${_ts_file}
DEPENDS ${_lst_file_srcs}
WORKING_DIRECTORY ${PYTHON_ROOT}
VERBATIM)
endforeach()
qt5_add_translation(${_qm_files} ${_my_tsfiles})
set(${_qm_files} ${${_qm_files}} PARENT_SCOPE)
endfunction()
+18
View File
@@ -0,0 +1,18 @@
cmake_minimum_required(VERSION 3.16)
include(${CMAKE_CURRENT_LIST_DIR}/cpp.cmake)
macro(do_project)
do_cpp_project()
endmacro()
macro(do_src)
cpp_pre_target()
add_library(${CMAKE_PROJECT_NAME} STATIC ${input_files})
install(TARGETS ${CMAKE_PROJECT_NAME}
ARCHIVE DESTINATION libs)
cpp_post_target()
endmacro()
+17 -4
View File
@@ -1,7 +1,20 @@
cmake_minimum_required(VERSION 3.16)
include(${CMAKE_CURRENT_LIST_DIR}/cpp.cmake)
add_library(${CMAKE_PROJECT_NAME} SHARED ${input_files})
target_link_libraries(${CMAKE_PROJECT_NAME} uibase)
macro(do_project)
do_cpp_project()
endmacro()
install(TARGETS ${CMAKE_PROJECT_NAME} RUNTIME DESTINATION bin/plugins)
install(FILES $<TARGET_PDB_FILE:${CMAKE_PROJECT_NAME}> DESTINATION pdb)
macro(do_src)
cpp_pre_target()
add_library(${CMAKE_PROJECT_NAME} SHARED ${input_files})
target_link_libraries(${CMAKE_PROJECT_NAME} uibase)
cpp_post_target()
install(TARGETS ${CMAKE_PROJECT_NAME} RUNTIME DESTINATION bin/plugins)
install(FILES $<TARGET_PDB_FILE:${CMAKE_PROJECT_NAME}> DESTINATION pdb)
endmacro()
+31 -49
View File
@@ -15,7 +15,11 @@ endfunction()
if(NOT DEFINED enable_warnings)
set(enable_warnings OFF)
set(enable_warnings ON)
endif()
if(NOT DEFINED enable_permissive)
set(enable_permissive OFF)
endif()
if(NOT DEFINED create_translations)
@@ -27,14 +31,18 @@ if(NOT DEFINED additional_translations)
endif()
set(COMPILE_FLAGS "/std:c++latest /permissive- /MP")
set(COMPILE_FLAGS "/std:c++latest /MP")
set(OPTIMIZE_COMPILE_FLAGS "/O2")
set(OPTIMIZE_LINK_FLAGS "/LTCG /INCREMENTAL:NO /OPT:REF /OPT:ICF")
if (${enable_warnings})
if(${enable_warnings})
set(COMPILE_FLAGS "${COMPILE_FLAGS} /Wall /wd4464")
endif()
if(NOT ${enable_permissive})
set(COMPILE_FLAGS "${COMPILE_FLAGS} /permissive-")
endif()
required_variable(BOOST_ROOT)
required_variable(BOOST_LIBRARYDIR)
required_variable(QT_ROOT)
@@ -42,6 +50,7 @@ required_variable(FMT_ROOT)
required_variable(SPDLOG_ROOT)
required_variable(LZ4_ROOT)
required_variable(ZLIB_ROOT)
required_variable(SEVENZ_ROOT)
required_variable(CMAKE_INSTALL_PREFIX)
get_real_path(modorganizer_build_path "${CMAKE_CURRENT_SOURCE_DIR}/../..")
@@ -51,54 +60,27 @@ get_real_path(uibase_include_path "${uibase_path}/src")
get_real_path(modorganizer_install_path "${modorganizer_super_path}/../../install")
get_real_path(modorganizer_install_lib_path "${modorganizer_install_path}/libs")
set(Boost_USE_STATIC_RUNTIME OFF)
list(APPEND CMAKE_PREFIX_PATH
${QT_ROOT}/lib/cmake
${LZ4_ROOT}/dll
${FMT_ROOT}/build
${BOOST_ROOT}/build)
list(APPEND CMAKE_PREFIX_PATH ${QT_ROOT}/lib/cmake)
list(APPEND CMAKE_PREFIX_PATH ${LZ4_ROOT}/dll)
list(APPEND CMAKE_PREFIX_PATH ${FMT_ROOT}/build)
list(APPEND CMAKE_PREFIX_PATH ${BOOST_ROOT}/build)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5QuickWidgets REQUIRED)
find_package(Qt5Quick REQUIRED)
find_package(Qt5Network REQUIRED)
find_package(Qt5WinExtras REQUIRED)
find_package(Qt5WebEngineWidgets REQUIRED)
find_package(Qt5WebSockets REQUIRED)
find_package(Qt5Qml REQUIRED)
find_package(Qt5LinguistTools)
find_package(zlib REQUIRED)
find_package(Boost REQUIRED COMPONENTS thread)
find_package(fmt REQUIRED)
if(${project_type} STREQUAL "plugin")
include(${CMAKE_CURRENT_LIST_DIR}/plugin.cmake)
elseif(${project_type} STREQUAL "dll")
include(${CMAKE_CURRENT_LIST_DIR}/dll.cmake)
elseif(${project_type} STREQUAL "lib")
include(${CMAKE_CURRENT_LIST_DIR}/lib.cmake)
elseif(${project_type} STREQUAL "exe")
include(${CMAKE_CURRENT_LIST_DIR}/exe.cmake)
elseif(${project_type} STREQUAL "python_plugin")
include(${CMAKE_CURRENT_LIST_DIR}/python_plugin.cmake)
else()
message(FATAL_ERROR "unknown project type '${project_type}'")
endif()
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(GLOBAL PROPERTY AUTOGEN_SOURCE_GROUP autogen)
set_property(GLOBAL PROPERTY AUTOMOC_SOURCE_GROUP autogen)
set_property(GLOBAL PROPERTY AUTORCC_SOURCE_GROUP autogen)
set(CMAKE_AUTOMOC on)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
do_project()
execute_process(
COMMAND git log -1 --format=%h
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_COMMIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
add_compile_definitions(
_UNICODE
UNICODE
NOMINMAX
_CRT_SECURE_NO_WARNINGS
BOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE
_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING
QT_MESSAGELOGCONTEXT
GITID="${GIT_COMMIT_HASH}")
set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1)
set(CMAKE_INSTALL_MESSAGE NEVER)
set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" PROPERTY
VS_STARTUP_PROJECT ${CMAKE_PROJECT_NAME})
+19
View File
@@ -0,0 +1,19 @@
include(${CMAKE_CURRENT_LIST_DIR}/helpers/PyQt5TranslationMacros.cmake)
macro(do_python_project)
find_package(Qt5LinguistTools)
if(${create_translations})
pyqt5_create_translation(
qm_files
${CMAKE_SOURCE_DIR}/src ${additional_translations}
${CMAKE_SOURCE_DIR}/src/${CMAKE_PROJECT_NAME}_en.ts
)
endif()
file(GLOB_RECURSE source_files CONFIGURE_DEPENDS *.py)
set(input_files
${source_files}
${qm_files})
endmacro()
+11
View File
@@ -0,0 +1,11 @@
cmake_minimum_required(VERSION 3.16)
include(${CMAKE_CURRENT_LIST_DIR}/python.cmake)
macro(do_project)
do_python_project()
endmacro()
macro(do_src)
install(FILES ${source_files} DESTINATION bin/plugins)
endmacro()
+1 -93
View File
@@ -1,94 +1,2 @@
cmake_minimum_required(VERSION 3.16)
function(add_filter)
cmake_parse_arguments(PARSE_ARGV 0 add_filter "" "NAME" "FILES;GROUPS")
set(files ${add_filter_FILES})
foreach(f ${add_filter_GROUPS})
set(files ${files} ${f}.cpp ${f}.h ${f}.inc ${f}.ui)
endforeach()
string(REPLACE "/" "\\" filter_name ${add_filter_NAME})
source_group(${filter_name} FILES ${files})
endfunction()
file(GLOB_RECURSE source_files CONFIGURE_DEPENDS *.cpp)
file(GLOB_RECURSE header_files CONFIGURE_DEPENDS *.h)
file(GLOB_RECURSE qrc_files CONFIGURE_DEPENDS *.qrc)
file(GLOB_RECURSE rc_files CONFIGURE_DEPENDS *.rc)
file(GLOB_RECURSE rule_files CONFIGURE_DEPENDS ${CMAKE_BINARY_DIR}/*.rule)
file(GLOB_RECURSE misc_files CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/../*.natvis)
if(${create_translations})
qt5_create_translation(
qm_files
${CMAKE_SOURCE_DIR}/src ${additional_translations}
${CMAKE_SOURCE_DIR}/src/${CMAKE_PROJECT_NAME}_en.ts
OPTIONS -silent
)
endif()
link_directories(
${modorganizer_install_lib_path}
${Boost_LIBRARY_DIRS}
${LZ4_ROOT}/bin
${ZLIB_ROOT}/lib
)
set(input_files
${source_files} ${header_files} ${qm_files} ${qrc_files}
${rc_files} ${misc_files})
if(${project_type} STREQUAL "plugin")
include(${CMAKE_CURRENT_LIST_DIR}/plugin.cmake)
elseif(${project_type} STREQUAL "dll")
include(${CMAKE_CURRENT_LIST_DIR}/dll.cmake)
elseif(${project_type} STREQUAL "exe")
include(${CMAKE_CURRENT_LIST_DIR}/exe.cmake)
else()
message(FATAL_ERROR "unknown project type '${project_type}'")
endif()
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
${uibase_include_path}
${Boost_INCLUDE_DIRS}
${SPDLOG_ROOT}/include)
source_group(src REGULAR_EXPRESSION ".*\\.(h|cpp|ui)")
source_group(cmake FILES CMakeLists.txt)
source_group(autogen FILES ${rule_files} ${qm_files})
source_group(autogen REGULAR_EXPRESSION ".*\\cmake_pch.*")
source_group(resources FILES ${rc_files} ${qrc_files})
if(EXISTS ${CMAKE_SOURCE_DIR}/src/pch.h)
target_precompile_headers(${CMAKE_PROJECT_NAME}
PRIVATE ${CMAKE_SOURCE_DIR}/src/pch.h)
endif()
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
COMPILE_FLAGS "${COMPILE_FLAGS}")
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
COMPILE_FLAGS_RELWITHDEBINFO "${OPTIMIZE_COMPILE_FLAGS}")
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
LINK_FLAGS_RELWITHDEBINFO "${OPTIMIZE_LINK_FLAGS}")
target_link_libraries(${CMAKE_PROJECT_NAME}
Qt5::Widgets
Qt5::WinExtras
Qt5::WebEngineWidgets
Qt5::Quick
Qt5::Qml
Qt5::QuickWidgets
Qt5::Network
Qt5::WebSockets
fmt::fmt
liblz4 zlibstatic
${Boost_LIBRARIES}
Dbghelp Version Shlwapi
)
do_src()