-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
190 lines (157 loc) · 7.72 KB
/
CMakeLists.txt
File metadata and controls
190 lines (157 loc) · 7.72 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
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
cmake_minimum_required(VERSION 3.16)
project(NOWALuaScript VERSION 0.1 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Option to specify the Qt bin directory
# Note: In Qt Creator goto project -> filter search for qt_bin_dir and specify the bin diretory there.
set(QT_BIN_DIR "E:/Qt/6.7.2/mingw_64/bin" CACHE STRING "Path to the Qt bin directory")
# Prompt the user to specify TARGET_PATH
set(TARGET_PATH "" CACHE PATH "Specify the target folder path for the project")
# Check if TARGET_PATH is set
if(NOT TARGET_PATH)
message(FATAL_ERROR "TARGET_PATH is not set. Please set it using -DTARGET_PATH=/path/to/your/folder where the deployed application shall be built")
endif()
# Use TARGET_PATH in your CMake script
message(STATUS "TARGET_PATH is set to: ${TARGET_PATH}")
# Add TARGET_PATH as a preprocessor definition
add_definitions(-DTARGET_PATH="${TARGET_PATH}")
find_package(Qt6 REQUIRED COMPONENTS Quick Concurrent)
# Manually specifies the library path
set(LUA_LIBRARIES "${CMAKE_SOURCE_DIR}/lua-5_2/lib/lua.lib")
set(LUA_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/lua-5_2/include")
qt_standard_project_setup()
qt_add_executable(NOWALuaScript
main.cpp
)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/qml)
qt_add_resources(NOWALuaScript "qml"
PREFIX
"/"
FILES
qml_files/DetailsArea.qml
qml_files/LuaEditor.qml
qml_files/Main.qml
qml_files/MainMenu.qml
qml_files/SearchDialog.qml
qml_files/AboutDialog.qml
qml_files/IntelliSenseContextMenu.qml
qml_files/MatchedFunctionContextMenu.qml
)
qt_add_qml_module(NOWALuaScript
URI NOWALuaScript
VERSION 1.0
SOURCES
luascriptcontroller.h luascriptcontroller.cpp
luascriptqmladapter.h luascriptqmladapter.cpp
appcommunicator.h appcommunicator.cpp
backend/luascript.h backend/luascript.cpp
model/luaeditormodelitem.h model/luaeditormodelitem.cpp
model/luaeditormodel.h model/luaeditormodel.cpp
model/apimodel.h model/apimodel.cpp
model/matchclassworker.h model/matchclassworker.cpp
qml/luaeditorqml.h qml/luaeditorqml.cpp
qml/luahighlighter.h qml/luahighlighter.cpp
luascriptadapter.h luascriptadapter.cpp
RESOURCES resources.qrc
)
set_target_properties(NOWALuaScript PROPERTIES
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE
)
include_directories(${LUA_INCLUDE_DIR})
target_link_libraries(NOWALuaScript
PRIVATE Qt6::Quick Qt6::Concurrent
${LUA_LIBRARIES}
)
include(GNUInstallDirs)
install(TARGETS NOWALuaScript
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
#add_compile_definitions("SOURCE_ROOT=${CMAKE_SOURCE_DIR}")
# Pass CMAKE_SOURCE_DIR as a preprocessor definition
target_compile_definitions(NOWALuaScript PRIVATE
SOURCE_ROOT="${CMAKE_SOURCE_DIR}"
$<$<CONFIG:Release>:QT_NO_DEBUG_OUTPUT> # Define QT_NO_DEBUG_OUTPUT only in Release mode
$<$<NOT:$<CONFIG:Release>>:QT_DEBUG_OUTPUT> # Optional: Define QT_DEBUG_OUTPUT in other modes
)
# Generate the deployment script for QML-based Qt6 applications
#qt_generate_deploy_qml_app_script(
# TARGET NOWALuaScript
# OUTPUT_SCRIPT deploy_script
#)
# Install the deploy script and resources
#install(SCRIPT ${deploy_script})
if(CMAKE_BUILD_TYPE STREQUAL "Release")
# Copy DLLs based on the user-defined QT_BIN_DIR
if(WIN32)
# Find all .dll files in the source folder
file(GLOB DLL_FILES "${QT_BIN_DIR}/*.dll")
# Create a list to store the commands
set(COPY_COMMANDS)
# Iterate over each DLL file and append copy commands
foreach(DLL_FILE ${DLL_FILES})
list(APPEND COPY_COMMANDS
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${DLL_FILE}" "${CMAKE_BINARY_DIR}/bin"
COMMAND ${CMAKE_COMMAND} -E echo "----->Copy DLL_FILE ${DLL_FILE} to ${CMAKE_BINARY_DIR}/bin"
)
endforeach()
# Add a post-build command to copy each .dll file
add_custom_command(TARGET NOWALuaScript POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo "Copying DLL files for Release build..."
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/bin"
COMMAND ${CMAKE_COMMAND} -E echo "--->Create directory ${CMAKE_BINARY_DIR}/bin"
${COPY_COMMANDS}
# Copy thirdparty like lua
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/lua-5_2/bin/Lua.dll" "${CMAKE_BINARY_DIR}/bin"
COMMAND ${CMAKE_COMMAND} -E echo "----->Copy Lua.dll to ${CMAKE_BINARY_DIR}/bin"
# Copy exe from build/.../ to the bin dir
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:NOWALuaScript> "${CMAKE_BINARY_DIR}/bin"
COMMAND ${CMAKE_COMMAND} -E echo "----->Copy TARGET_FILE $<TARGET_FILE:NOWALuaScript> to ${CMAKE_BINARY_DIR}/bin"
COMMENT "Copying necessary Qt libraries and executable to the output directory"
# Copies missing necessary files via Qt script automatically
COMMAND ${QT_BIN_DIR}/windeployqt --dir ${CMAKE_BINARY_DIR}/bin NOWALuaScript.exe --qmldir ${CMAKE_SOURCE_DIR}
COMMAND ${CMAKE_COMMAND} -E echo "----->windeployqt from ${QT_BIN_DIR}/windeployqt to ${CMAKE_BINARY_DIR}/bin NOWALuaScript.exe and qmldir from: ${CMAKE_SOURCE_DIR}"
COMMENT "Deploying Qt DLLs and QML files using windeployqt"
)
# Source and destination directories
set(SOURCE_DIR "${CMAKE_BINARY_DIR}/bin")
set(DESTINATION_DIR "${TARGET_PATH}/NOWALuaScript/bin")
add_custom_command(
TARGET NOWALuaScript
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${DESTINATION_DIR}
COMMAND ${CMAKE_COMMAND} -E copy_directory ${SOURCE_DIR} ${DESTINATION_DIR}
COMMENT "Copying all files and subdirectories from ${SOURCE_DIR} to ${DESTINATION_DIR} after build"
)
elseif(APPLE)
# Similar setup for macOS
add_custom_command(TARGET NOWALuaScript POST_BUILD
COMMAND ${QT_BIN_DIR}/macdeployqt $<TARGET_BUNDLE_DIR:NOWALuaScript> -qmldir=${CMAKE_SOURCE_DIR}/qml
COMMENT "Deploying Qt frameworks and QML files using macdeployqt"
)
endif()
endif()
# Define the icon files for each platform
if(WIN32)
# Windows: Add the .ico file through a resource file
set(APP_ICON_RESOURCE "${CMAKE_CURRENT_SOURCE_DIR}/NOWALuaScript.rc")
target_sources(NOWALuaScript PRIVATE ${APP_ICON_RESOURCE})
elseif(APPLE)
# macOS: Use the .icns file
set(MACOSX_BUNDLE_ICON_FILE "NOWALuaScript.icns")
set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/NOWALuaScript.icns" PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
target_sources(NOWALuaScript PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/NOWALuaScript.icns")
else()
# Linux: Install the .png file and ensure it is used in the .desktop file
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/NOWALuaScript.png" DESTINATION share/icons/hicolor/48x48/apps)
endif()
#message(STATUS "--->Executable path: ${CMAKE_BINARY_DIR}/NOWALuaScript.exe")
#message(STATUS "--->Target file: $<TARGET_FILE:NOWALuaScript>")
#message(STATUS "--->Bin path: ${CMAKE_BINARY_DIR}/bin")
#message(STATUS "--->Copy path: ${Qt6_DIR}")
#message(STATUS "--->Source path: ${CMAKE_SOURCE_DIR}")
#message(STATUS "--->Install Prefix path: ${Qt6Core_INSTALL_PREFIX}")
#message(STATUS "--->Deploy script path: ${deploy_script}")