Skip to content

Commit ea37143

Browse files
committed
Modernize project file
1 parent f9dcfd2 commit ea37143

1 file changed

Lines changed: 90 additions & 71 deletions

File tree

CMakeLists.txt

Lines changed: 90 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -4,35 +4,37 @@ project(QmlMobileScanner VERSION 0.5 LANGUAGES C CXX)
44

55
set(CMAKE_CXX_STANDARD 20)
66
set(CMAKE_CXX_STANDARD_REQUIRED ON)
7-
set(CMAKE_INCLUDE_CURRENT_DIR ON)
87
set(CMAKE_AUTOMOC ON)
98
set(CMAKE_AUTORCC ON)
109

11-
set(APP_NAME ${CMAKE_PROJECT_NAME})
12-
set(APP_VERSION ${CMAKE_PROJECT_VERSION})
10+
set(APP_NAME ${PROJECT_NAME})
11+
set(APP_VERSION ${PROJECT_VERSION})
1312

1413
option(USE_ZINT "Build with zint support (encoder)" ON)
1514
option(USE_ZXINGCPP "Build with zxing-cpp support (decoder & encoder)" ON)
1615
option(USE_QZXING "Build with QZXing support (decoder & encoder) (LEGACY)" OFF)
1716

1817
################################################################################
1918

20-
message(STATUS ">>> BUILDING ${PROJECT_NAME} >>>")
19+
message(STATUS ">>> BUILDING ${PROJECT_NAME} v${PROJECT_VERSION} >>>")
2120
message(STATUS "[CMAKE] CMAKE_VERSION = ${CMAKE_VERSION}")
2221
message(STATUS "[CMAKE] CMAKE_PREFIX_PATH = ${CMAKE_PREFIX_PATH}")
2322
message(STATUS "[BUILD] QT_HOST_PATH = ${QT_HOST_PATH}")
2423
message(STATUS "[BUILD] TOOLCHAIN_FILE = ${CMAKE_TOOLCHAIN_FILE}")
24+
message(STATUS "[BUILD] BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
2525
message(STATUS "[SYSTEM] (HOST) SYSTEM NAME = ${CMAKE_HOST_SYSTEM_NAME}")
2626
message(STATUS "[SYSTEM] (HOST) SYSTEM VERSION = ${CMAKE_HOST_SYSTEM_VERSION}")
2727
message(STATUS "[SYSTEM] (HOST) SYSTEM PROCESSOR = ${CMAKE_HOST_SYSTEM_PROCESSOR}")
2828
message(STATUS "[SYSTEM] (TARGET) SYSTEM NAME = ${CMAKE_SYSTEM_NAME}")
2929
message(STATUS "[SYSTEM] (TARGET) SYSTEM VERSION = ${CMAKE_SYSTEM_VERSION}")
3030
message(STATUS "[SYSTEM] (TARGET) SYSTEM PROCESSOR = ${CMAKE_SYSTEM_PROCESSOR}")
31-
message(STATUS "[PROJECT] CMAKE_PROJECT_NAME = ${PROJECT_NAME}")
32-
message(STATUS "[PROJECT] CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
33-
message(STATUS "[PROJECT] PROJECT_NAME = ${CMAKE_PROJECT_NAME}")
34-
message(STATUS "[PROJECT] SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
35-
message(STATUS "[PROJECT] BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
31+
message(STATUS "[TOP PROJECT] CMAKE_PROJECT_NAME = ${CMAKE_PROJECT_NAME}")
32+
message(STATUS "[TOP PROJECT] CMAKE_PROJECT_VERSION = ${CMAKE_PROJECT_VERSION}")
33+
message(STATUS "[TOP PROJECT] CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
34+
message(STATUS "[PROJECT] PROJECT_NAME = ${PROJECT_NAME}")
35+
message(STATUS "[PROJECT] PROJECT_VERSION = ${PROJECT_VERSION}")
36+
message(STATUS "[PROJECT] PROJECT_SOURCE_DIR = ${PROJECT_SOURCE_DIR}")
37+
message(STATUS "[PROJECT] CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
3638

3739
################################################################################
3840

@@ -57,6 +59,7 @@ set(SOURCES
5759
src/BarcodeManager.cpp src/BarcodeManager.h
5860
src/Barcode.cpp src/Barcode.h
5961
src/utils_camera.cpp src/utils_camera.h
62+
src/utils_barcode.cpp src/utils_barcode.h
6063

6164
assets/assets.qrc
6265
thirdparty/IconLibrary/IconLibrary_material.qrc
@@ -72,18 +75,18 @@ else() # Desktop
7275

7376
# Set app icons
7477
#if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
75-
# set(SOURCES_DESKTOP "${CMAKE_SOURCE_DIR}/assets/windows/${CMAKE_PROJECT_NAME}.rc")
78+
# set(SOURCES_DESKTOP "${PROJECT_SOURCE_DIR}/assets/windows/${PROJECT_NAME}.rc")
7679
#elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
77-
# set(SOURCES_DESKTOP "${CMAKE_SOURCE_DIR}/assets/macos/${CMAKE_PROJECT_NAME}.icns")
80+
# set(SOURCES_DESKTOP "${PROJECT_SOURCE_DIR}/assets/macos/${PROJECT_NAME}.icns")
7881
#endif()
7982
endif()
8083

81-
qt_add_executable(${CMAKE_PROJECT_NAME} ${SOURCES} ${SOURCES_DESKTOP} ${SOURCES_MOBILE})
84+
qt_add_executable(${PROJECT_NAME} ${SOURCES} ${SOURCES_DESKTOP} ${SOURCES_MOBILE})
8285

83-
qt_add_ios_ffmpeg_libraries(${CMAKE_PROJECT_NAME})
86+
qt_add_ios_ffmpeg_libraries(${PROJECT_NAME})
8487

85-
qt_add_qml_module(${CMAKE_PROJECT_NAME}
86-
URI ${CMAKE_PROJECT_NAME}
88+
qt_add_qml_module(${PROJECT_NAME}
89+
URI ${PROJECT_NAME}
8790
NO_PLUGIN
8891
QML_FILES
8992
qml/MobileApplication.qml
@@ -120,9 +123,9 @@ qt_add_qml_module(${CMAKE_PROJECT_NAME}
120123
qml/components/WidgetBarcodeResult.qml
121124
)
122125

123-
qt_add_translations(${CMAKE_PROJECT_NAME}
124-
TS_FILE_BASE ${CMAKE_PROJECT_NAME}
125-
TS_FILE_DIR ${CMAKE_SOURCE_DIR}/i18n/
126+
qt_add_translations(${PROJECT_NAME}
127+
TS_FILE_BASE ${PROJECT_NAME}
128+
TS_FILE_DIR ${PROJECT_SOURCE_DIR}/i18n/
126129
RESOURCE_PREFIX "/i18n"
127130
)
128131

@@ -136,7 +139,7 @@ function(add_other_files target)
136139
endforeach()
137140
endfunction()
138141

139-
add_other_files(${CMAKE_PROJECT_NAME}
142+
add_other_files(${PROJECT_NAME}
140143
README.md LICENSE.md TODO.md
141144
.github/workflows/builds_mobile.yml
142145
.gitignore
@@ -148,34 +151,34 @@ add_other_files(${CMAKE_PROJECT_NAME}
148151
set(UTILS_CLIPBOARD true CACHE BOOL "UTILS_CLIPBOARD" FORCE)
149152
set(UTILS_DOCK_ENABLED true CACHE BOOL "UTILS_DOCK_ENABLED" FORCE)
150153
add_subdirectory(thirdparty/AppUtils)
151-
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE AppUtils)
154+
target_link_libraries(${PROJECT_NAME} PRIVATE AppUtils)
152155

153156
# MobileUI
154157
add_subdirectory(thirdparty/MobileUI)
155-
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE MobileUI MobileUI_plugin)
158+
target_link_libraries(${PROJECT_NAME} PRIVATE MobileUI MobileUI_plugin)
156159

157160
# MobileSharing
158161
add_subdirectory(thirdparty/MobileSharing)
159-
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE MobileSharing)
162+
target_link_libraries(${PROJECT_NAME} PRIVATE MobileSharing MobileSharing_plugin)
160163

161164
# ComponentLibrary
162165
add_subdirectory(thirdparty/ComponentLibrary)
163-
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ComponentLibrary_plugin)
166+
target_link_libraries(${PROJECT_NAME} PRIVATE ComponentLibrary_plugin)
164167

165168
if(USE_ZXINGCPP)
166169
# build zxing-cpp
167170
add_subdirectory(thirdparty/zxing-cpp)
168-
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ZXing)
171+
target_link_libraries(${PROJECT_NAME} PRIVATE ZXing)
169172

170173
# build zxing-cpp Qt wrapper
171174
add_subdirectory(thirdparty/zxing-cpp/wrappers/qt)
172-
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ZXingQt)
173-
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE QMS_USE_ZXINGCPP)
175+
target_link_libraries(${PROJECT_NAME} PRIVATE ZXingQt)
176+
target_compile_definitions(${PROJECT_NAME} PRIVATE QMS_USE_ZXINGCPP)
174177
elseif(USE_QZXING)
175178
# build QZXing
176179
add_subdirectory(thirdparty/QZXing)
177-
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE QZXing)
178-
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE QMS_USE_QZXING)
180+
target_link_libraries(${PROJECT_NAME} PRIVATE QZXing)
181+
target_compile_definitions(${PROJECT_NAME} PRIVATE QMS_USE_QZXING)
179182
else()
180183
#
181184
endif()
@@ -184,19 +187,19 @@ if(USE_ZINT)
184187
# build zint
185188
add_subdirectory(thirdparty/zint-qml)
186189
if (BUILD_SHARED_LIBS)
187-
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE zint)
190+
target_link_libraries(${PROJECT_NAME} PRIVATE zint)
188191
else()
189-
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE zint-static)
192+
target_link_libraries(${PROJECT_NAME} PRIVATE zint-static)
190193
endif()
191194

192195
# build Zint QML wrapper
193196
add_subdirectory(thirdparty/zint-qml/wrappers/qml)
194-
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ZintQml)
195-
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE QMS_USE_ZINT)
197+
target_link_libraries(${PROJECT_NAME} PRIVATE ZintQml)
198+
target_compile_definitions(${PROJECT_NAME} PRIVATE QMS_USE_ZINT)
196199
endif()
197200

198201
# Qt libraries
199-
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE
202+
target_link_libraries(${PROJECT_NAME} PRIVATE
200203
Qt6::Core
201204
Qt6::Gui
202205
Qt6::Svg
@@ -210,60 +213,70 @@ target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE
210213
if(NOT IOS AND NOT ANDROID)
211214
# for proper systray and menubar support
212215
find_package(Qt6 REQUIRED COMPONENTS Widgets)
213-
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE Qt6::Widgets)
216+
target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Widgets)
214217
endif()
215218

216-
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE src/)
217-
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE thirdparty/)
219+
target_include_directories(${PROJECT_NAME} PRIVATE src/)
220+
target_include_directories(${PROJECT_NAME} PRIVATE thirdparty/)
221+
222+
# Qt official hacks...
223+
set(QML_IMPORT_PATH
224+
"${CMAKE_BINARY_DIR}/thirdparty/"
225+
"${CMAKE_BINARY_DIR}/thirdparty/MobileUI"
226+
"${CMAKE_BINARY_DIR}/thirdparty/ComponentLibrary"
227+
CACHE STRING "QML Modules import paths" FORCE)
228+
229+
# Qt official hacks...
230+
set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
218231

219232
################################################################################
220233

221234
## Release build? Set "no debug" macros
222-
if(CMAKE_BUILD_TYPE STREQUAL Release)
223-
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE
224-
NDEBUG
225-
QT_NO_DEBUG
226-
QT_NO_DEBUG_OUTPUT
227-
)
228-
endif()
235+
target_compile_definitions(${PROJECT_NAME} PRIVATE
236+
$<$<CONFIG:Release>:NDEBUG>
237+
$<$<CONFIG:Release>:QT_NO_DEBUG>
238+
$<$<CONFIG:Release>:QT_NO_DEBUG_OUTPUT>
239+
)
229240

230241
################################################################################
231242

243+
include(GNUInstallDirs)
244+
232245
## Linux
233246
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
234247
# System install rules
235-
install(TARGETS ${CMAKE_PROJECT_NAME} RUNTIME DESTINATION bin/)
236-
#install(FILES ${CMAKE_SOURCE_DIR}/assets/linux/${CMAKE_PROJECT_NAME}.desktop DESTINATION share/applications/)
237-
#install(FILES ${CMAKE_SOURCE_DIR}/assets/linux/${CMAKE_PROJECT_NAME}.appdata.xml DESTINATION share/appdata/)
238-
#install(FILES ${CMAKE_SOURCE_DIR}/assets/linux/${CMAKE_PROJECT_NAME}.svg DESTINATION share/pixmaps/)
239-
#install(FILES ${CMAKE_SOURCE_DIR}/assets/linux/${CMAKE_PROJECT_NAME}.svg DESTINATION share/icons/hicolor/scalable/apps/)
240-
#install(FILES ${CMAKE_SOURCE_DIR}/LICENSE.md DESTINATION share/licenses/${CMAKE_PROJECT_NAME}/)
248+
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin/)
249+
#install(FILES ${PROJECT_SOURCE_DIR}/assets/linux/${PROJECT_NAME}.desktop DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications/)
250+
#install(FILES ${PROJECT_SOURCE_DIR}/assets/linux/${PROJECT_NAME}.appdata.xml DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/appdata/)
251+
#install(FILES ${PROJECT_SOURCE_DIR}/assets/linux/${PROJECT_NAME}.svg DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pixmaps/)
252+
#install(FILES ${PROJECT_SOURCE_DIR}/assets/linux/${PROJECT_NAME}.svg DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/apps/)
253+
#install(FILES ${PROJECT_SOURCE_DIR}/LICENSE.md DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/licenses/${PROJECT_NAME}/)
241254
endif()
242255

243256
## macOS
244257
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
245258
#set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64")
246259
set(CMAKE_OSX_DEPLOYMENT_TARGET "12.0")
247260

248-
#set(app_icon_macos "${CMAKE_SOURCE_DIR}/assets/macos/${CMAKE_PROJECT_NAME}.icns")
261+
#set(app_icon_macos "${PROJECT_SOURCE_DIR}/assets/macos/${PROJECT_NAME}.icns")
249262
#set_source_files_properties(${app_icon_macos} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
250263

251-
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
264+
set_target_properties(${PROJECT_NAME} PROPERTIES
252265
MACOSX_BUNDLE ON
253-
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/assets/macos/Info.plist"
266+
MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR}/assets/macos/Info.plist"
254267
# New Xcode attributes (???)
255268
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "io.emeric.qmlmobilescanner"
256-
XCODE_ATTRIBUTE_PRODUCT_NAME ${CMAKE_PROJECT_NAME}
257-
XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION ${CMAKE_PROJECT_VERSION}
269+
XCODE_ATTRIBUTE_PRODUCT_NAME ${PROJECT_NAME}
270+
XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION ${PROJECT_VERSION}
258271
XCODE_ATTRIBUTE_MARKETING_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
259-
XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_SOURCE_DIR}/assets/macos/${CMAKE_PROJECT_NAME}.entitlements"
272+
XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${PROJECT_SOURCE_DIR}/assets/macos/${PROJECT_NAME}.entitlements"
260273
#XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME AppIcon
261274
)
262275
endif()
263276

264277
## Windows
265278
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
266-
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
279+
set_target_properties(${PROJECT_NAME} PROPERTIES
267280
WIN32_EXECUTABLE ON
268281
)
269282
endif()
@@ -272,16 +285,16 @@ endif()
272285

273286
## Android
274287
if(CMAKE_SYSTEM_NAME STREQUAL "Android")
275-
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
288+
set_target_properties(${PROJECT_NAME} PROPERTIES
276289
#QT_ANDROID_ABIS "armeabi-v7a;arm64-v8a;x86;x86_64"
277290
#QT_ANDROID_BUILD_ALL_ABIS ON
278291
QT_ANDROID_MIN_SDK_VERSION 28
279292
QT_ANDROID_TARGET_SDK_VERSION 36
280-
QT_ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_SOURCE_DIR}/assets/android/"
293+
QT_ANDROID_PACKAGE_SOURCE_DIR "${PROJECT_SOURCE_DIR}/assets/android/"
281294
)
282295

283296
# Support 16 KB page sizes / pre NDK28
284-
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")
297+
target_link_options(${PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")
285298

286299
## Download SSL Libraries
287300
#include(FetchContent)
@@ -291,25 +304,26 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Android")
291304
# URL https://github.com/KDAB/android_openssl/archive/refs/heads/master.zip
292305
#)
293306
#FetchContent_MakeAvailable(android_openssl)
294-
#include(${android_openssl_SOURCE_DIR}/android_openssl.cmake)
307+
295308
## Include SSL Libraries
296-
#add_android_openssl_libraries(${CMAKE_PROJECT_NAME})
309+
#include(${android_openssl_SOURCE_DIR}/android_openssl.cmake)
310+
#add_android_openssl_libraries(${PROJECT_NAME})
297311
endif()
298312

299313
## iOS
300314
if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
301-
#set(app_icon_ios "${CMAKE_SOURCE_DIR}/assets/ios/Assets.xcassets")
315+
#set(app_icon_ios "${PROJECT_SOURCE_DIR}/assets/ios/Assets.xcassets")
302316
#set_source_files_properties(${app_icon_ios} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
303317

304-
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
318+
set_target_properties(${PROJECT_NAME} PROPERTIES
305319
MACOSX_BUNDLE ON
306-
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/assets/ios/Info.plist"
320+
MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR}/assets/ios/Info.plist"
307321
# Qt
308-
#QT_IOS_LAUNCH_SCREEN "${CMAKE_SOURCE_DIR}/assets/ios/LaunchScreen.storyboard"
322+
#QT_IOS_LAUNCH_SCREEN "${PROJECT_SOURCE_DIR}/assets/ios/LaunchScreen.storyboard"
309323
# New Xcode attributes (???)
310324
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "io.emeric.qmlmobilescanner"
311-
XCODE_ATTRIBUTE_PRODUCT_NAME ${CMAKE_PROJECT_NAME}
312-
XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION ${CMAKE_PROJECT_VERSION}
325+
XCODE_ATTRIBUTE_PRODUCT_NAME ${PROJECT_NAME}
326+
XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION ${PROJECT_VERSION}
313327
XCODE_ATTRIBUTE_MARKETING_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
314328
XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "16.0"
315329
XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2" # iPhone,iPad
@@ -321,10 +335,15 @@ endif()
321335
################################################################################
322336

323337
# Output (build)
324-
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
325-
#ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/lib"
326-
#LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/lib"
327-
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin"
338+
set_target_properties(${PROJECT_NAME} PROPERTIES
339+
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin"
340+
)
341+
342+
# Output (install)
343+
install(TARGETS ${PROJECT_NAME}
344+
BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR}
345+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
346+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
328347
)
329348

330349
################################################################################

0 commit comments

Comments
 (0)