Add version

main
Евгений Тетерин 2025-04-06 09:22:03 +03:00
parent 8b41090149
commit 64c1ff3c2a
9 changed files with 184 additions and 25 deletions

View File

@ -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()

View File

@ -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 ()

View File

@ -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@"

View File

@ -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})

View File

@ -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

BIN
_resources/main.ico 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

View File

@ -0,0 +1 @@
IDI_ICON1 ICON "main.ico"

View File

@ -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$<$<CONFIG:Debug>:Debug>")
set(PROJECT_SOURCES
main.cpp
)
# Оптимизация размера и скорости
add_compile_options(
"$<$<CONFIG:RELEASE>:/Os>" # Оптимизация по размеру
"$<$<CONFIG:RELEASE>:/Oy>" # Отключение кадров стека
"$<$<CONFIG:RELEASE>:/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$<$<CONFIG:Debug>:Debug>")
# Оптимизация размера и скорости
add_compile_options(
"$<$<CONFIG:RELEASE>:/Os>" # Оптимизация по размеру
"$<$<CONFIG:RELEASE>:/Oy>" # Отключение кадров стека
"$<$<CONFIG:RELEASE>:/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}
)

View File

@ -1,3 +1,5 @@
#ifdef WIN32
// Для Windows MSVC ============================================================
#include <windows.h>
#include <string>
#include <vector>
@ -198,4 +200,13 @@ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
return 0;
}
//==============================================================================
#else
// Для Linux GCC ===============================================================
//==============================================================================
#endif
//==============================================================================