Skip to content

Commit 23c653e

Browse files
committed
cmake: refactoring; create archive as result of build
1 parent bee93f8 commit 23c653e

File tree

4 files changed

+81
-48
lines changed

4 files changed

+81
-48
lines changed

CMakeLists.txt

+39-29
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
cmake_minimum_required(VERSION 3.15)
2-
project(Calculator CXX C)
2+
project(Calculator)
33

44
#====================================================
55
# Enable policy
@@ -13,43 +13,40 @@ cmake_policy(SET CMP0091 NEW)
1313
if (NOT CMAKE_BUILD_TYPE)
1414
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type, one of: Release, Debug" FORCE)
1515
endif ()
16-
message("Build type for Calculator: ${CMAKE_BUILD_TYPE}")
16+
message("Build type for ${PROJECT_NAME}: ${CMAKE_BUILD_TYPE}")
17+
18+
#====================================================
19+
# Set configuration types
20+
#====================================================
21+
if(NOT MSVC_IDE)
22+
set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE)
23+
else()
24+
#target_compile_options cannot set parameters for all configurations in MSVC
25+
set(CMAKE_CONFIGURATION_TYPES "${CMAKE_BUILD_TYPE}" CACHE STRING "" FORCE)
26+
endif()
27+
message("Configurations for IDE: ${CMAKE_CONFIGURATION_TYPES}")
1728

1829
# check platform for build
1930
set(IS_x64_PLATFORM FALSE CACHE BOOL "" FORCE)
2031
if ("$ENV{PLATFORM}" MATCHES "x64")
2132
set(IS_x64_PLATFORM TRUE CACHE BOOL "" FORCE)
2233
endif ()
2334

24-
# Get plugin version from src/plugcalc/version.h and put it in PLUGIN_VERSION
25-
function(plugin_extract_version)
26-
file(READ "${CMAKE_CURRENT_LIST_DIR}/src/plugcalc/version.h" file_contents)
27-
string(REGEX MATCH "PLUGIN_VER_MAJOR ([0-9]+)" _ "${file_contents}")
28-
if (NOT CMAKE_MATCH_COUNT EQUAL 1)
29-
message(FATAL_ERROR "Could not extract major version number from version.hpp")
30-
endif ()
31-
set(ver_major ${CMAKE_MATCH_1})
32-
33-
string(REGEX MATCH "PLUGIN_VER_MINOR ([0-9]+)" _ "${file_contents}")
34-
if (NOT CMAKE_MATCH_COUNT EQUAL 1)
35-
message(FATAL_ERROR "Could not extract minor version number from version.hpp")
36-
endif ()
37-
38-
set(ver_minor ${CMAKE_MATCH_1})
39-
string(REGEX MATCH "PLUGIN_VER_PATCH ([0-9]+)" _ "${file_contents}")
40-
if (NOT CMAKE_MATCH_COUNT EQUAL 1)
41-
message(FATAL_ERROR "Could not extract patch version number from version.hpp")
42-
endif ()
43-
set(ver_patch ${CMAKE_MATCH_1})
44-
45-
set(PLUGIN_VERSION "${ver_major}.${ver_minor}.${ver_patch}" PARENT_SCOPE)
46-
endfunction()
35+
include(cmake/utils.cmake)
36+
plugin_extract_version(${CMAKE_CURRENT_LIST_DIR}/src/plugcalc/version.h)
37+
if (IS_x64_PLATFORM)
38+
set(PACKAGE_FILE_NAME "${PROJECT_NAME}.${PLUGIN_VERSION}.x64")
39+
else ()
40+
set(PACKAGE_FILE_NAME "${PROJECT_NAME}.${PLUGIN_VERSION}.x86")
41+
endif ()
4742

48-
plugin_extract_version()
43+
#====================================================
44+
# build plugin
45+
#====================================================
4946
add_subdirectory(src)
5047

5148
#====================================================
52-
# build misc files
49+
# build resource files
5350
#====================================================
5451
# used @@ESCAPE and ESCAPE@@ for escape @ in files
5552
configure_file(res/file_id.diz.in res/file_id.diz)
@@ -59,11 +56,24 @@ configure_file(res/calcr.hlf.in res/calcr.hlf)
5956
#====================================================
6057
# install
6158
#====================================================
59+
install(TARGETS Calculator RUNTIME DESTINATION .)
6260
install(DIRECTORY res/
6361
DESTINATION .
6462
PATTERN "*.in" EXCLUDE)
65-
install(FILES whatsnew_en.txt whatsnew_ru.txt
63+
install(FILES
64+
${CMAKE_CURRENT_BINARY_DIR}/src/calc.map
6665
${CMAKE_CURRENT_BINARY_DIR}/res/file_id.diz
6766
${CMAKE_CURRENT_BINARY_DIR}/res/calce.hlf
6867
${CMAKE_CURRENT_BINARY_DIR}/res/calcr.hlf
69-
DESTINATION .)
68+
whatsnew_en.txt
69+
whatsnew_ru.txt
70+
DESTINATION .)
71+
72+
#====================================================
73+
# cpack
74+
#====================================================
75+
set(CPACK_GENERATOR "ZIP" CACHE STRING "Generators to support. semi-colon delimited list")
76+
set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY 0)
77+
set(CPACK_PACKAGE_FILE_NAME "${PACKAGE_FILE_NAME}")
78+
79+
include(CPack)

cmake/utils.cmake

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
function(plugin_extract_version path_to_version_file)
2+
file(READ "${path_to_version_file}" file_contents)
3+
string(REGEX MATCH "PLUGIN_VER_MAJOR ([0-9]+)" _ "${file_contents}")
4+
if (NOT CMAKE_MATCH_COUNT EQUAL 1)
5+
message(FATAL_ERROR "Could not extract major version number from ${path_to_version_file}")
6+
endif ()
7+
set(ver_major ${CMAKE_MATCH_1})
8+
9+
string(REGEX MATCH "PLUGIN_VER_MINOR ([0-9]+)" _ "${file_contents}")
10+
if (NOT CMAKE_MATCH_COUNT EQUAL 1)
11+
message(FATAL_ERROR "Could not extract minor version number from ${path_to_version_file}")
12+
endif ()
13+
14+
set(ver_minor ${CMAKE_MATCH_1})
15+
string(REGEX MATCH "PLUGIN_VER_PATCH ([0-9]+)" _ "${file_contents}")
16+
if (NOT CMAKE_MATCH_COUNT EQUAL 1)
17+
message(FATAL_ERROR "Could not extract patch version number from ${path_to_version_file}")
18+
endif ()
19+
set(ver_patch ${CMAKE_MATCH_1})
20+
21+
set(PLUGIN_VERSION "${ver_major}.${ver_minor}.${ver_patch}" PARENT_SCOPE)
22+
endfunction()

src/CMakeLists.txt

+14-17
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
project(Calculator CXX C)
1+
project(Calculator VERSION ${PLUGIN_VERSION} LANGUAGES CXX C)
22

33
set(SRC_CPP
44
plugcalc/api.cpp
@@ -58,15 +58,14 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
5858
set(FLAGS_CXX_RELEASE /W3 /Oi /Ot /GL /GS- /Ob1 /GF /GR)
5959
set(FLAGS_CXX_DEBUG /W4 /GS)
6060

61-
6261
set(LINK_FLAGS "/MAP /MANIFEST:NO")
6362

6463
# build with debug info in pdb
6564
if (CMAKE_BUILD_TYPE MATCHES "Release")
6665
set(LINK_FLAGS "${LINK_FLAGS} /incremental:no /OPT:REF /OPT:ICF /debug /ltcg")
6766
endif ()
6867

69-
add_definitions(-DUNICODE -D_UNICODE)
68+
add_definitions(-DUNICODE -D_UNICODE -D_CRT_SECURE_NO_WARNINGS -DTTMATH_RELEASE)
7069

7170
if (IS_x64_PLATFORM)
7271
set(CMAKE_RC_FLAGS -D_WIN64)
@@ -75,8 +74,6 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
7574
add_definitions(-DWINDOWS_IGNORE_PACKING_MISMATCH)
7675
endif ()
7776

78-
add_definitions(-D_CRT_SECURE_NO_WARNINGS -DTTMATH_RELEASE)
79-
8077
endif ()
8178

8279
# set options for target
@@ -90,38 +87,38 @@ set(MAIN_FLAGS_C_RELEASE ${FLAGS_C_RELEASE} ${FLAGS_C_DEFAULT})
9087
#====================================================
9188

9289
set(SRC_FILES ${SRC_CPP} ${SRC_DEF})
93-
add_library(Calculator SHARED ${SRC_FILES})
94-
target_include_directories(Calculator
90+
add_library(${PROJECT_NAME} SHARED ${SRC_FILES})
91+
target_include_directories(${PROJECT_NAME}
9592
PRIVATE ./shared
9693
)
9794

98-
set_target_properties(Calculator PROPERTIES
95+
set_target_properties(${PROJECT_NAME} PROPERTIES
9996
CXX_STANDARD 11
10097
CXX_STANDARD_REQUIRED YES
10198
CXX_EXTENSIONS NO
10299
)
103100

104101
if (${CMAKE_BUILD_TYPE} MATCHES Debug)
105-
target_compile_options(Calculator
102+
target_compile_options(${PROJECT_NAME}
106103
PUBLIC $<$<COMPILE_LANGUAGE:C>:${MAIN_FLAGS_C_DEBUG}>
107104
PUBLIC $<$<COMPILE_LANGUAGE:CXX>:${MAIN_FLAGS_CXX_DEBUG}>
108105
)
109106
else ()
110-
target_compile_options(Calculator
107+
target_compile_options(${PROJECT_NAME}
111108
PUBLIC $<$<COMPILE_LANGUAGE:C>:${MAIN_FLAGS_C_RELEASE}>
112109
PUBLIC $<$<COMPILE_LANGUAGE:CXX>:${MAIN_FLAGS_CXX_RELEASE}>
113110
)
114111
endif ()
115112

116-
set_target_properties(Calculator
113+
set_target_properties(${PROJECT_NAME}
117114
PROPERTIES
118115
LINK_FLAGS "${LINK_FLAGS}"
119116
OUTPUT_NAME "calc"
120117
)
121118

122-
#====================================================
123-
# install
124-
#====================================================
125-
install(TARGETS Calculator RUNTIME DESTINATION .)
126-
install(FILES $<TARGET_PDB_FILE:${PROJECT_NAME}> ${CMAKE_CURRENT_BINARY_DIR}/calc.map DESTINATION .)
127-
119+
# create archive with pdb file
120+
add_custom_target(
121+
${PROJECT_NAME}_PDB ALL
122+
COMMAND ${CMAKE_COMMAND} -E tar "cfv" "../${PACKAGE_FILE_NAME}.pdb.zip" --format=zip $<TARGET_PDB_FILE:${PROJECT_NAME}>
123+
DEPENDS $<TARGET_PDB_FILE:${PROJECT_NAME}>
124+
)

vc.build.release.bat

+6-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ if exist "%VS160COMNTOOLS%..\..\VC\Auxiliary\Build\vcvarsall.bat" (
1111
mkdir build
1212
cd build
1313
cmake .. -DCMAKE_INSTALL_PREFIX=../bin/x86 -DCMAKE_BUILD_TYPE=Release -G "CodeBlocks - NMake Makefiles"
14-
cmake --build . --target install
14+
cmake --build .
15+
cpack
16+
copy *.zip ..\bin
1517

1618
if errorlevel 1 goto end
1719

@@ -24,7 +26,9 @@ if exist "%VS160COMNTOOLS%..\..\VC\Auxiliary\Build\vcvarsall.bat" (
2426
mkdir build64
2527
cd build64
2628
cmake .. -DCMAKE_INSTALL_PREFIX=../bin/x64 -DCMAKE_BUILD_TYPE=Release -G "CodeBlocks - NMake Makefiles"
27-
cmake --build . --target install
29+
cmake --build .
30+
cpack
31+
copy *.zip ..\bin
2832

2933
:end
3034
echo See result in directory "bin"

0 commit comments

Comments
 (0)