This repository has been archived by the owner on Dec 18, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
175 lines (159 loc) · 4.54 KB
/
CMakeLists.txt
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
cmake_minimum_required(VERSION 3.16)
project(mdu VERSION 2024.12.15 LANGUAGES CXX)
# Set C++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Find Qt packages
find_package(Qt6 COMPONENTS
Core
Gui
Quick
QuickControls2
QuickWidgets
Widgets
Concurrent
REQUIRED
)
# Source files
set(SOURCES
src/core/ffmpeghelper.cpp
src/core/stemextractor/stemextractor.cpp
src/core/stemextractor/uvrhelper.cpp
src/core/ytdlphelper.cpp
src/gui/aboutqt.cpp
src/gui/dialogmanager.cpp
src/gui/encoderoption.cpp
src/gui/windowcontroller.cpp
src/main.cpp
src/gui/mainwindow.cpp
src/gui/framelesshelper.cpp
src/gui/winnativeeventfilter.cpp
src/core/downloadmanager.cpp
src/utils/devicesmanager.cpp
src/utils/downloadbinary.cpp
src/utils/settingsmanager.cpp
src/utils/updateytdlp.cpp
)
set(HEADERS
src/core/downloadmanager.hpp
src/core/ffmpeghelper.hpp
src/core/stemextractor/stemextractor.hpp
src/core/stemextractor/uvrhelper.hpp
src/core/ytdlphelper.hpp
src/gui/aboutqt.hpp
src/gui/dialogmanager.hpp
src/gui/encoderoption.h
src/gui/mainwindow.hpp
src/gui/framelesshelper.hpp
src/gui/windowcontroller.hpp
src/gui/winnativeeventfilter.hpp
src/utils/devicesmanager.hpp
src/utils/downloadbinary.hpp
src/utils/settingsmanager.hpp
src/utils/updateytdlp.hpp
)
set(UI_FILES
src/gui/encoderoption.ui
)
# Create the executable
add_executable(${PROJECT_NAME}
${SOURCES}
${HEADERS}
${UI_FILES}
resources/shared.qrc
)
# Include directories
target_include_directories(${PROJECT_NAME} PRIVATE
src
src/gui
src/core
)
# Link Qt libraries
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt6::Core
Qt6::Gui
Qt6::Quick
Qt6::QuickControls2
Qt6::QuickWidgets
Qt6::Widgets
Qt6::Concurrent
)
# Windows-specific configuration
if(WIN32)
target_link_libraries(${PROJECT_NAME} PRIVATE
user32
dwmapi
shcore
d2d1
uxtheme
gdi32
shell32
dxgi
d3d11
)
# Windows version definitions
target_compile_definitions(${PROJECT_NAME} PRIVATE
WINVER=0x0601
_WIN32_WINNT=0x0601
_CRT_SECURE_NO_WARNINGS
)
# Set application icon
set(APP_ICON_RESOURCE_WINDOWS "${CMAKE_CURRENT_SOURCE_DIR}/resources/icons/ap2.ico")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/resource.rc"
"IDI_ICON1 ICON \"${APP_ICON_RESOURCE_WINDOWS}\"")
target_sources(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/resource.rc")
endif()
# Compiler-specific settings
if(MSVC)
target_compile_options(${PROJECT_NAME} PRIVATE
/W3
$<$<CONFIG:Release>:/O2 /GL /Zi>
)
target_link_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Release>:/LTCG /DEBUG>
/SUBSYSTEM:WINDOWS
)
elseif(CMAKE_COMPILER_IS_GNUCXX)
target_compile_options(${PROJECT_NAME} PRIVATE
-Wall
-Wextra
-Wpedantic
$<$<CONFIG:Release>:-O2>
)
endif()
# Define version and other compile definitions
target_compile_definitions(${PROJECT_NAME} PRIVATE
APP_VERSION="${PROJECT_VERSION}"
QT_DEPRECATED_WARNINGS
QT_MESSAGELOGCONTEXT
QT_USE_QSTRINGBUILDER
QT_ENABLE_HIGHDPI_SCALING
)
# Installation
if(WIN32)
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install")
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION .)
install(FILES
"${CMAKE_SOURCE_DIR}/README.md"
"${CMAKE_SOURCE_DIR}/LICENSE"
DESTINATION .
)
# Create version file during installation
file(WRITE "${CMAKE_BINARY_DIR}/version.txt" "${PROJECT_VERSION}")
install(FILES "${CMAKE_BINARY_DIR}/version.txt" DESTINATION .)
# Add deployment target for Windows
add_custom_target(deploy
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/deploy"
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${PROJECT_NAME}> "${CMAKE_BINARY_DIR}/deploy"
COMMAND windeployqt --release --no-translations --no-system-d3d-compiler "${CMAKE_BINARY_DIR}/deploy/${PROJECT_NAME}.exe"
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/README.md" "${CMAKE_BINARY_DIR}/deploy"
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/LICENSE" "${CMAKE_BINARY_DIR}/deploy"
COMMAND ${CMAKE_COMMAND} -E echo "${PROJECT_VERSION}" > "${CMAKE_BINARY_DIR}/deploy/version.txt"
DEPENDS ${PROJECT_NAME}
)
else()
include(GNUInstallDirs)
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
endif()