-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
153 lines (127 loc) · 4.38 KB
/
Copy pathCMakeLists.txt
File metadata and controls
153 lines (127 loc) · 4.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
cmake_minimum_required(VERSION 3.16)
project(QAwesomeIcon VERSION 1.0.0 LANGUAGES CXX)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Find required Qt components
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Widgets Gui Svg Concurrent Qml Quick)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Widgets Gui Svg Concurrent Qml Quick)
# Create the library
set(LIBRARY_SOURCES
src/qawesomeicon.h
src/qawesomeicon.cpp
src/qawesomeicon_global.h
src/animation/qawesomeanimationmanager.h
src/animation/qawesomeanimationmanager.cpp
src/animation/qawesomeanimationbackend.h
src/animation/qawesomeanimationbackend.cpp
src/animation/backends/qawesomegifbackend.h
src/animation/backends/qawesomegifbackend.cpp
src/animation/backends/qawesomespritebackend.h
src/animation/backends/qawesomespritebackend.cpp
src/animation/backends/qawesomesvgbackend.h
src/animation/backends/qawesomesvgbackend.cpp
src/icon/qawesomeiconupdater.h
src/icon/qawesomeiconupdater.cpp
src/threading/qawesomeanimationworker.h
src/threading/qawesomeanimationworker.cpp
src/utils/qawesomeutils.h
src/utils/qawesomeutils.cpp
)
# Build the library
add_library(QAwesomeIconLib SHARED ${LIBRARY_SOURCES})
target_include_directories(QAwesomeIconLib PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
$<INSTALL_INTERFACE:include>
)
# Avoid QDataStream dependency in moc-generated code
target_compile_definitions(QAwesomeIconLib PRIVATE QT_NO_DATASTREAM)
target_link_libraries(QAwesomeIconLib PRIVATE
Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Gui
Qt${QT_VERSION_MAJOR}::Svg
Qt${QT_VERSION_MAJOR}::Concurrent
Qt${QT_VERSION_MAJOR}::Qml
Qt${QT_VERSION_MAJOR}::Quick
)
# Set library properties
set_target_properties(QAwesomeIconLib PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
OUTPUT_NAME QAwesomeIcon
)
# Define library macros
target_compile_definitions(QAwesomeIconLib PRIVATE QAWESOMEICON_LIBRARY)
# Build example application
set(EXAMPLE_SOURCES
examples/main.cpp
examples/mainwindow.cpp
examples/mainwindow.h
examples/mainwindow.ui
examples/spritesheetparamsdialog.cpp
examples/spritesheetparamsdialog.h
)
add_executable(QAwesomeIconExample ${EXAMPLE_SOURCES})
# Avoid QDataStream dependency in moc-generated code for example as well
target_compile_definitions(QAwesomeIconExample PRIVATE QT_NO_DATASTREAM)
target_link_libraries(QAwesomeIconExample PRIVATE
QAwesomeIconLib
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Gui
)
# Platform-specific settings
if(WIN32)
target_compile_definitions(QAwesomeIconLib PRIVATE Q_OS_WIN)
# Link Windows-specific libraries for taskbar operations
target_link_libraries(QAwesomeIconLib PRIVATE user32 shell32)
endif()
if(UNIX AND NOT APPLE)
target_compile_definitions(QAwesomeIconLib PRIVATE Q_OS_LINUX)
endif()
if(APPLE)
target_compile_definitions(QAwesomeIconLib PRIVATE Q_OS_MACOS)
set_target_properties(QAwesomeIconExample PROPERTIES
MACOSX_BUNDLE TRUE
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
)
endif()
# Installation
include(GNUInstallDirs)
install(TARGETS QAwesomeIconLib
EXPORT QAwesomeIconTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
install(DIRECTORY src/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/QAwesomeIcon
FILES_MATCHING PATTERN "*.h"
)
install(TARGETS QAwesomeIconExample
BUNDLE DESTINATION .
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
# Export targets
install(EXPORT QAwesomeIconTargets
FILE QAwesomeIconTargets.cmake
NAMESPACE QAwesomeIcon::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/QAwesomeIcon
)
# Create config files
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
QAwesomeIconConfigVersion.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion
)
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/QAwesomeIconConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/QAwesomeIcon
)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(QAwesomeIconExample)
endif()