-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
168 lines (145 loc) · 4.46 KB
/
CMakeLists.txt
File metadata and controls
168 lines (145 loc) · 4.46 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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
cmake_minimum_required(VERSION 3.13)
# 设置项目名称和版本
project(dde-device-formatter VERSION 1.0.0)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 包含 GNUInstallDirs,用于获取标准安装路径
include(GNUInstallDirs)
# Find Qt version
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
message(" >>> Found Qt version: ${QT_VERSION_MAJOR}")
if (QT_VERSION_MAJOR MATCHES 6)
set(DTK_VERSION_MAJOR 6)
else()
set(DTK_VERSION_MAJOR "")
endif()
# 查找必要的包
set(QT_COMPONENTS Core Gui Widgets Concurrent Network DBus LinguistTools)
if (QT_VERSION_MAJOR MATCHES 5)
list(APPEND QT_COMPONENTS X11Extras)
endif()
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS ${QT_COMPONENTS} REQUIRED)
find_package(Dtk${DTK_VERSION_MAJOR} COMPONENTS Widget Gui REQUIRED)
find_package(PkgConfig REQUIRED)
pkg_check_modules(UDISKS2QT REQUIRED IMPORTED_TARGET udisks2-qt${QT_VERSION_MAJOR})
pkg_check_modules(PKGS REQUIRED
x11
)
# 设置源文件
set(SOURCES
main.cpp
view/mainwindow.cpp
view/mainpage.cpp
view/warnpage.cpp
view/formatingpage.cpp
view/finishpage.cpp
view/errorpage.cpp
app/cmdmanager.cpp
dialogs/messagedialog.cpp
app/singletonapp.cpp
utils/udisksutils.cpp
utils/fsutils.cpp
)
set(HEADERS
view/mainwindow.h
view/mainpage.h
view/warnpage.h
view/formatingpage.h
view/finishpage.h
view/errorpage.h
app/cmdmanager.h
dialogs/messagedialog.h
app/singletonapp.h
utils/udisksutils.h
utils/fsutils.h
)
# 设置翻译文件
file(GLOB TS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/translations/${PROJECT_NAME}*.ts")
# 根据 Qt 版本使用不同的翻译工具
if (QT_VERSION_MAJOR MATCHES 6)
# Qt6 使用 qt_add_translations
qt_add_translations(${PROJECT_NAME}
# 指定翻译源文件
TS_FILES ${TS_FILES}
# 指定 QM 文件输出变量
QM_FILES_OUTPUT_VARIABLE QM_FILES
# 指定源文件,用于更新翻译
SOURCES ${SOURCES} ${HEADERS}
# 指定 LRELEASE 选项
LRELEASE_OPTIONS
-compress
-nounfinished
-removeidentical
)
else()
# Qt5 手动生成 QM 文件
set(QM_FILES)
foreach(TS_FILE ${TS_FILES})
get_filename_component(TS_FILE_NAME ${TS_FILE} NAME_WE)
set(QM_FILE "${CMAKE_CURRENT_BINARY_DIR}/${TS_FILE_NAME}.qm")
add_custom_command(
OUTPUT ${QM_FILE}
COMMAND lrelease -compress -nounfinished -removeidentical ${TS_FILE} -qm ${QM_FILE}
DEPENDS ${TS_FILE}
COMMENT "Generating ${QM_FILE} from ${TS_FILE}"
)
list(APPEND QM_FILES ${QM_FILE})
endforeach()
add_custom_target(generate_qm ALL DEPENDS ${QM_FILES})
endif()
# 在文件开头部分添加自动 moc 处理
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
# 添加可执行文件
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})
# 设置包含目录
target_include_directories(${PROJECT_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${PKGS_INCLUDE_DIRS}
${UDISKS2QT_INCLUDE_DIRS}
)
# 链接库
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Gui
Qt${QT_VERSION_MAJOR}::GuiPrivate
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Concurrent
Qt${QT_VERSION_MAJOR}::Network
Qt${QT_VERSION_MAJOR}::DBus
Dtk${DTK_VERSION_MAJOR}::Widget
Dtk${DTK_VERSION_MAJOR}::Gui
PkgConfig::UDISKS2QT
${PKGS_LIBRARIES}
)
# Qt5 需要链接 X11Extras
if (QT_VERSION_MAJOR MATCHES 5)
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt${QT_VERSION_MAJOR}::X11Extras
)
endif()
# 添加编译选项
target_compile_options(${PROJECT_NAME} PRIVATE ${PKGS_CFLAGS_OTHER})
# 添加链接选项
target_link_options(${PROJECT_NAME} PRIVATE -pie)
# 设置翻译文件路径
set(TRANSLATIONS_INSTALL_DIR "${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}/translations")
# 添加编译定义,传递安装路径到代码中
target_compile_definitions(${PROJECT_NAME} PRIVATE
"TRANSLATIONS_DIR=\"${TRANSLATIONS_INSTALL_DIR}\""
)
# 安装目标
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
# 安装翻译文件
install(FILES ${QM_FILES}
DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/translations
)
# 安装桌面文件
install(FILES dde-device-formatter.desktop
DESTINATION ${CMAKE_INSTALL_DATADIR}/applications
)