diff --git a/cpp.cmake b/cpp.cmake new file mode 100644 index 0000000..08871b4 --- /dev/null +++ b/cpp.cmake @@ -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() diff --git a/dll.cmake b/dll.cmake index db54eea..9a91489 100644 --- a/dll.cmake +++ b/dll.cmake @@ -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 $ - 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 $ + DESTINATION pdb) + + cpp_post_target() +endmacro() diff --git a/exe.cmake b/exe.cmake index 047cb6f..5a5fcc6 100644 --- a/exe.cmake +++ b/exe.cmake @@ -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 $ 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 $ DESTINATION pdb) +endmacro() diff --git a/helpers/PyQt5TranslationMacros.cmake b/helpers/PyQt5TranslationMacros.cmake new file mode 100644 index 0000000..d9308ee --- /dev/null +++ b/helpers/PyQt5TranslationMacros.cmake @@ -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() diff --git a/lib.cmake b/lib.cmake new file mode 100644 index 0000000..8f7008c --- /dev/null +++ b/lib.cmake @@ -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() diff --git a/plugin.cmake b/plugin.cmake index bc53504..4b126e0 100644 --- a/plugin.cmake +++ b/plugin.cmake @@ -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 $ 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 $ DESTINATION pdb) +endmacro() diff --git a/project.cmake b/project.cmake index b2a2cd0..44d5eaa 100644 --- a/project.cmake +++ b/project.cmake @@ -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}) diff --git a/python.cmake b/python.cmake new file mode 100644 index 0000000..1ee49f8 --- /dev/null +++ b/python.cmake @@ -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() diff --git a/python_plugin.cmake b/python_plugin.cmake new file mode 100644 index 0000000..6fa913f --- /dev/null +++ b/python_plugin.cmake @@ -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() diff --git a/src.cmake b/src.cmake index 8d605c0..7b8dfdd 100644 --- a/src.cmake +++ b/src.cmake @@ -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()