From 64c1ff3c2aea6923535ece48914a34813eb60161 Mon Sep 17 00:00:00 2001 From: nayk Date: Sun, 6 Apr 2025 09:22:03 +0300 Subject: [PATCH] Add version --- _cmake/app_settings.cmake | 17 +++++++++ _cmake/common.cmake | 48 ++++++++++++++++++++++++++ _cmake/config.h.in | 9 +++++ _cmake/version.cmake | 19 +++++++++++ _cmake/versioninfo.rc.in | 34 ++++++++++++++++++ _resources/main.ico | Bin 0 -> 52014 bytes _resources/main_icon.rc | 1 + sources/CMakeLists.txt | 70 ++++++++++++++++++++++++-------------- sources/main.cpp | 11 ++++++ 9 files changed, 184 insertions(+), 25 deletions(-) create mode 100644 _cmake/app_settings.cmake create mode 100644 _cmake/common.cmake create mode 100644 _cmake/config.h.in create mode 100644 _cmake/version.cmake create mode 100644 _cmake/versioninfo.rc.in create mode 100644 _resources/main.ico create mode 100644 _resources/main_icon.rc diff --git a/_cmake/app_settings.cmake b/_cmake/app_settings.cmake new file mode 100644 index 0000000..db34954 --- /dev/null +++ b/_cmake/app_settings.cmake @@ -0,0 +1,17 @@ + +include(${CMAKE_CURRENT_SOURCE_DIR}/../_cmake/common.cmake) +include(${CMAKE_INC_DIR}/version.cmake) + +# Variables for application + +set(RUNTIME_OUTPUT_NAME ${PROJECT_NAME}) + +configure_file(${CMAKE_INC_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h @ONLY) + +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${DISTRIB_DIR}) + +if (CMAKE_SYSTEM_NAME STREQUAL "Windows") + configure_file(${CMAKE_INC_DIR}/versioninfo.rc.in ${CMAKE_CURRENT_BINARY_DIR}/versioninfo.rc @ONLY) +endif() + + diff --git a/_cmake/common.cmake b/_cmake/common.cmake new file mode 100644 index 0000000..b659f4e --- /dev/null +++ b/_cmake/common.cmake @@ -0,0 +1,48 @@ + +set(CMAKE_INCLUDE_CURRENT_DIR ON) +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(SOFT_DEVELOPER "Evgeny Teterin (nayk)") +set(DEVELOPER_DOMAIN "poseon.ru") + +set(ROOT_PROJECT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../ ) + +cmake_path(NORMAL_PATH ROOT_PROJECT_DIR OUTPUT_VARIABLE ROOT_PROJECT_DIR) + +set(CMAKE_INC_DIR + ${ROOT_PROJECT_DIR}_cmake +) + +set(RESOURCES_DIR + ${ROOT_PROJECT_DIR}_resources +) + +set(SOURCES_DIR + ${ROOT_PROJECT_DIR}sources +) + +set(COMMON_SOURCES_DIR + ${ROOT_PROJECT_DIR}_include +) + +if (${CMAKE_SIZEOF_VOID_P} STREQUAL 4) + set(DIR_PREFIX "32") +elseif (${CMAKE_SIZEOF_VOID_P} STREQUAL 8) + set(DIR_PREFIX "64") +endif () + +set(DISTRIB_DIR + ${ROOT_PROJECT_DIR}_distrib/${CMAKE_SYSTEM_NAME}_${DIR_PREFIX}-bit +) + +message(STATUS "Project '${PROJECT_NAME}' compiler ${CMAKE_CXX_COMPILER} version: ${CMAKE_CXX_COMPILER_VERSION}") +message(STATUS "Project '${PROJECT_NAME}' distrib dir: '${DISTRIB_DIR}'") +message(STATUS "Variable CMAKE_PREFIX_PATH: '${CMAKE_PREFIX_PATH}'") +message(STATUS "Variable CMAKE_SYSTEM_LIBRARY_PATH: '${CMAKE_SYSTEM_LIBRARY_PATH}'") + +if(CMAKE_SYSTEM_NAME STREQUAL "Windows") + set(SYSTEM_INCLUDE_DIR "${CMAKE_PREFIX_PATH}/include") +else () + set(SYSTEM_INCLUDE_DIR "/usr/include") +endif () + diff --git a/_cmake/config.h.in b/_cmake/config.h.in new file mode 100644 index 0000000..41f8ac6 --- /dev/null +++ b/_cmake/config.h.in @@ -0,0 +1,9 @@ +#define PROG_NAME "@PROJECT_NAME@" +#define PROG_VERSION "@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@.@BUILD_NUM@@PROJECT_VERSION_TWEAK@" +#define PROG_CAPTION "@PROJECT_NAME@ v" +#define PROG_DESCRIPTION "@PROJECT_DESCRIPTION@" +#define SOFT_DEVELOPER "@SOFT_DEVELOPER@" +#define DEVELOPER_DOMAIN "@DEVELOPER_DOMAIN@" +#define BUILD_DATE "@BUILD_DATE@" +#define BUILD_NUM "@BUILD_NUM@" +#define ORIGINAL_FILE_NAME "@ORIGINAL_FILE_NAME@" diff --git a/_cmake/version.cmake b/_cmake/version.cmake new file mode 100644 index 0000000..a8b12b0 --- /dev/null +++ b/_cmake/version.cmake @@ -0,0 +1,19 @@ +# Variables for generating the version. Used in the application (config.h file) +# +# BUILD_DATE - date in format 'yyyy-mm-dd H:M' +# BUILD_NUM - number of build (days of year) +# PROJECT_VERSION_PATCH - in format 'yy' +# +# Application version format: 'MAJOR.MINOR.PROJECT_VERSION_PATCH.BUILD_NUM' + +string(TIMESTAMP BUILD_DATE "%Y-%m-%d %H:%M") + +string(TIMESTAMP BUILD_NUM "%j") + +math(EXPR BUILD_NUM ${BUILD_NUM}) + +string(SUBSTRING ${BUILD_DATE} 2 2 YEAR_STR) + +set(PROJECT_VERSION_PATCH ${YEAR_STR}) + +set(ORIGINAL_FILE_NAME ${RUNTIME_OUTPUT_NAME}) diff --git a/_cmake/versioninfo.rc.in b/_cmake/versioninfo.rc.in new file mode 100644 index 0000000..607b22e --- /dev/null +++ b/_cmake/versioninfo.rc.in @@ -0,0 +1,34 @@ +1 TYPELIB "versioninfo.rc" + +1 VERSIONINFO + FILEVERSION @PROJECT_VERSION_MAJOR@, @PROJECT_VERSION_MINOR@, @PROJECT_VERSION_PATCH@, @BUILD_NUM@ + PRODUCTVERSION @PROJECT_VERSION_MAJOR@, @PROJECT_VERSION_MINOR@, @PROJECT_VERSION_PATCH@, @BUILD_NUM@ + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "@SOFT_DEVELOPER@" + VALUE "FileDescription", "@PROJECT_DESCRIPTION@" + VALUE "FileVersion","@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@.@BUILD_NUM@" + VALUE "InternalName", "@PROJECT_NAME@" + VALUE "LegalCopyright", "Copyright (c) @YEAR_STR@ @SOFT_DEVELOPER@" + VALUE "OriginalFilename", "@ORIGINAL_FILE_NAME@" + VALUE "ProductName", "@PROJECT_NAME@" + VALUE "ProductVersion","@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@.@BUILD_NUM@" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END diff --git a/_resources/main.ico b/_resources/main.ico new file mode 100644 index 0000000000000000000000000000000000000000..e2713393f91790acfc88361df19b93e1866421d3 GIT binary patch literal 52014 zcmeI5O^g&p6vvyGz!C2p+=~fEPF@TP(Io=A#Do=Lmj#wAN`gQ%LIR2hg0ib7qKP41 z{5%|Hy?d+>&0Zh1DDfw#jzzktu<64I?2yh)#$I6?W zbD_o7A)5uPMU*+riJ2HH9kn&(*t!<+TIw9rYr}O4Lrx6l<@WFIt0HWn z{9!sAwv=2^zZqd)X zSZ1li`b%NRiNSP>em)ChR}R)+4qHktrt9(=vM!WAOozgd6NBl7WbD!kq7a%bSMltF_>;h#xAW;{xBU5TS_jb>tYhJE|fn^hr*B(gXxB3?9vM557XhW zrQ~9|E+!%CLixjVC=594s$N(hB7d z)8VkCq7a%bSMltF_>;h#xAW;{xBU5TS_jb>tYhJE|fn^hr*B( zgXxB3?9vM557XhWrQ~9|az5YhUkHEUUxYb8SwlE6Md)LZJ#g4ka*N#eB6y=P@#=wp#R zP#AJzTzy~r;u5v=vn{Ig&|tiEfBLFg`$8A`ywv|vuUc6CLCyW^pLknTI;_@g=t1K_ zd(Y5zb@j?+RjpQY*{=M3DfWPI;IO6SV!Hhso>g7LgKF_l?dA4H*xJuscaA}x?9G_N7+@SI3^_5F?$R%|Cb-+<0M|h}@0mltB)Hq-0M|h}-jof4 zy!XaWde31?$xZ8-a_9F$DE}_K9+^0^pL^k7lz;pATldAAyu7&^ed8y+r!eHir1ebM z#UJhmCeG|#{Na9J;?jH5|Gf8UU#84qOUX4l>3#R-ThRFr_vCc^qTwIW`49Kxbi66& z&E4o5Kj}S%AtxrSXUg#G)1~jV_PP(pa8HIh6KD4D?9+bk#(iS|_hhIuap}F>fARnS z2F`FDz*+_zCD9zB6fiqkOuol4v_hfi3GWE6gAH4Ir8o!#~^CyfyJOkJA2In|) zo02=wyWl3K-RkFo4TT{mW?gT`(N^b-^?#seLDPSKUXSr+OuyC75A<|2{oh~Mv~b~! zbv+%&Tb*^f|C;?VV8dBksJZJ`KQ&9n;NEixum>hoevOEOv4*v1pts|Q9*bM)`S8$} zb)VzDuXuV>sCnOrag#QLfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1i}(fMfAOwWKgF!%@ z*f)KmQXZ;S$`|wcUTCbXJ%E>bse$*reAmz&tk-{@+|&N6mC}WJ{o8H0epiKBm!&;B zNBr~t4N;qAmN66l!r#oH(DTRWHfk^a{a16NSl4PNG=Hj|E6(nRE6%R7bNs}U5q7TK zX4c~@?b$g=cm9%{o7JEbZAje#glO zJJcp``dw$2s2-^#IH{ZX8KA1Z2Zhl__`e4q(-h7{&v$xwzy7QOp z+y~wNs_ngc{_Kk95X>dhw-s;gQ1j1@$8!kgk~t6i(7Hg;0d8$6NOVNjMucd>Xqv}Ju z6#XLf-;7s1`$mpG=+?XW^r1Zpe;I$7|Jb!&>-@ub{nzRzcCH!ykK2U%3S~QUU~;V( z`38@lT2H9ge?9A7JcV1L|^V^`{0hqw=Y{NTg@Brn#dv@0K9@KE9 z>UV$qO8onzzyWd>A1KEjfCH4@8{DRDT)#&00KY*=)z|O!Moes@_xhdPsIUL4mUs4P i52H=c9_d@&<$eD4`IGvGi$MClg8tg(%w}$Bz5f9%%-|jX literal 0 HcmV?d00001 diff --git a/_resources/main_icon.rc b/_resources/main_icon.rc new file mode 100644 index 0000000..59f679d --- /dev/null +++ b/_resources/main_icon.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON "main.ico" diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index 4eaabd4..3ea849f 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -1,35 +1,55 @@ cmake_minimum_required(VERSION 3.24) -project(launcher LANGUAGES CXX) +project(launcher + VERSION 1.0 + DESCRIPTION "Launcher" + LANGUAGES CXX +) -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) +include(${CMAKE_CURRENT_SOURCE_DIR}/../_cmake/app_settings.cmake) -# Настройки для MSVC -if(MSVC) - # Статическая линковка CRT - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") +set(PROJECT_SOURCES + main.cpp +) - # Оптимизация размера и скорости - add_compile_options( - "$<$:/Os>" # Оптимизация по размеру - "$<$:/Oy>" # Отключение кадров стека - "$<$:/GL>" # Включение LTO +if(CMAKE_SYSTEM_NAME STREQUAL "Windows") + + set(PROJECT_RC_FILES + ${RESOURCES_DIR}/main_icon.rc + ${CMAKE_CURRENT_BINARY_DIR}/versioninfo.rc ) - # Настройки линковщика - set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /OPT:REF /OPT:ICF") -endif() + # Настройки для MSVC + if(MSVC) + # Статическая линковка CRT + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + + # Оптимизация размера и скорости + add_compile_options( + "$<$:/Os>" # Оптимизация по размеру + "$<$:/Oy>" # Отключение кадров стека + "$<$:/GL>" # Включение LTO + ) + + # Настройки линковщика + set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /OPT:REF /OPT:ICF") + endif() + + add_executable(${PROJECT_NAME} WIN32 + ${PROJECT_SOURCES} + ${PROJECT_RC_FILES} + ) + + target_link_libraries(${PROJECT_NAME} + PRIVATE Kernel32.lib + PRIVATE shlwapi.lib + ) + +else () + + #target_compile_options(${PROJECT_NAME} PRIVATE -Werror -Wall -Wextra -Wpedantic) + +endif () -add_executable(${PROJECT_NAME} WIN32 main.cpp) -target_link_libraries(${PROJECT_NAME} - PRIVATE Kernel32.lib - PRIVATE shlwapi.lib -) -include(GNUInstallDirs) -install(TARGETS ${PROJECT_NAME} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} -) diff --git a/sources/main.cpp b/sources/main.cpp index c7b4700..4409674 100644 --- a/sources/main.cpp +++ b/sources/main.cpp @@ -1,3 +1,5 @@ +#ifdef WIN32 +// Для Windows MSVC ============================================================ #include #include #include @@ -198,4 +200,13 @@ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) return 0; } //============================================================================== +#else +// Для Linux GCC =============================================================== + + + + +//============================================================================== +#endif +//==============================================================================