Skip to content

Commit 02ecab1

Browse files
committed
Finish cmake-prj
2 parents fd2b15c + e07d525 commit 02ecab1

4 files changed

Lines changed: 339 additions & 245 deletions

File tree

omodsim/CMakeLists.txt

Lines changed: 295 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,295 @@
1+
cmake_minimum_required(VERSION 3.25)
2+
3+
project(OpenModSim
4+
VERSION 1.8.1
5+
LANGUAGES CXX)
6+
7+
set(CMAKE_AUTOUIC ON)
8+
set(CMAKE_AUTOMOC ON)
9+
set(CMAKE_AUTORCC ON)
10+
set(CMAKE_CXX_STANDARD 17)
11+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
12+
set(PRODUCT_NAME "Open ModSim")
13+
14+
# Find Qt6 or fallback to Qt5
15+
find_package(Qt6 COMPONENTS Core Gui Widgets Network PrintSupport SerialBus SerialPort Core5Compat Qml Help LinguistTools QUIET)
16+
if (NOT Qt6_FOUND)
17+
find_package(Qt5 COMPONENTS Core Gui Widgets Network PrintSupport SerialBus SerialPort Qml Help LinguistTools QUIET)
18+
endif()
19+
20+
# Define target
21+
add_executable(omodsim)
22+
23+
# Define compile definitions
24+
add_compile_definitions(APP_NAME="${PRODUCT_NAME}")
25+
add_compile_definitions(APP_DESCRIPTION="${PROJECT_DESCRIPTION}")
26+
add_compile_definitions(APP_VERSION="${PROJECT_VERSION}")
27+
28+
# Include directories
29+
target_include_directories(omodsim PRIVATE
30+
${CMAKE_CURRENT_SOURCE_DIR}
31+
${CMAKE_CURRENT_SOURCE_DIR}/controls
32+
${CMAKE_CURRENT_SOURCE_DIR}/dialogs
33+
${CMAKE_CURRENT_SOURCE_DIR}/jsobjects
34+
${CMAKE_CURRENT_SOURCE_DIR}/modbusmessages
35+
)
36+
37+
# Source files
38+
set(SOURCES
39+
cmdlineparser.cpp
40+
controls/addressbasecombobox.cpp
41+
controls/booleancombobox.cpp
42+
controls/bytelisttextedit.cpp
43+
controls/clickablelabel.cpp
44+
controls/consoleoutput.cpp
45+
controls/customframe.cpp
46+
controls/customlineedit.cpp
47+
controls/flowcontroltypecombobox.cpp
48+
controls/helpwidget.cpp
49+
controls/jscodeeditor.cpp
50+
controls/mainstatusbar.cpp
51+
controls/modbuslogwidget.cpp
52+
controls/modbusmessagewidget.cpp
53+
controls/numericcombobox.cpp
54+
controls/numericlineedit.cpp
55+
controls/outputwidget.cpp
56+
controls/paritytypecombobox.cpp
57+
controls/pointtypecombobox.cpp
58+
controls/runmodecombobox.cpp
59+
controls/scriptcontrol.cpp
60+
controls/searchlineedit.cpp
61+
controls/simulationmodecombobox.cpp
62+
datasimulator.cpp
63+
dialogs/dialogautosimulation.cpp
64+
dialogs/dialogcoilsimulation.cpp
65+
dialogs/dialogabout.cpp
66+
dialogs/dialogdisplaydefinition.cpp
67+
dialogs/dialogforcemultiplecoils.cpp
68+
dialogs/dialogforcemultipleregisters.cpp
69+
dialogs/dialogmsgparser.cpp
70+
dialogs/dialogprintsettings.cpp
71+
dialogs/dialogscriptsettings.cpp
72+
dialogs/dialogselectserviceport.cpp
73+
dialogs/dialogsetuppresetdata.cpp
74+
dialogs/dialogsetupserialport.cpp
75+
dialogs/dialogwindowsmanager.cpp
76+
dialogs/dialogwritecoilregister.cpp
77+
dialogs/dialogwriteholdingregister.cpp
78+
dialogs/dialogwriteholdingregisterbits.cpp
79+
htmldelegate.cpp
80+
jscompleter.cpp
81+
jsobjects/console.cpp
82+
jsobjects/script.cpp
83+
jsobjects/server.cpp
84+
formmodsim.cpp
85+
jshighlighter.cpp
86+
jsobjects/storage.cpp
87+
main.cpp
88+
mainwindow.cpp
89+
menuconnect.cpp
90+
modbusdataunitmap.cpp
91+
modbusmessages/modbusmessage.cpp
92+
modbusmultiserver.cpp
93+
qfixedsizedialog.cpp
94+
qhexvalidator.cpp
95+
qint64validator.cpp
96+
quintvalidator.cpp
97+
recentfileactionlist.cpp
98+
windowactionlist.cpp
99+
)
100+
101+
# Header files
102+
set(HEADERS
103+
byteorderutils.h
104+
cmdlineparser.h
105+
connectiondetails.h
106+
controls/addressbasecombobox.h
107+
controls/booleancombobox.h
108+
controls/bytelisttextedit.h
109+
controls/clickablelabel.h
110+
controls/consoleoutput.h
111+
controls/customframe.h
112+
controls/customlineedit.h
113+
controls/flowcontroltypecombobox.h
114+
controls/helpwidget.h
115+
controls/jscodeeditor.h
116+
controls/mainstatusbar.h
117+
controls/modbuslogwidget.h
118+
controls/modbusmessagewidget.h
119+
controls/numericcombobox.h
120+
controls/numericlineedit.h
121+
controls/outputwidget.h
122+
controls/paritytypecombobox.h
123+
controls/pointtypecombobox.h
124+
controls/runmodecombobox.h
125+
controls/scriptcontrol.h
126+
controls/searchlineedit.h
127+
controls/simulationmodecombobox.h
128+
datasimulator.h
129+
dialogs/dialogautosimulation.h
130+
dialogs/dialogcoilsimulation.h
131+
dialogs/dialogabout.h
132+
dialogs/dialogdisplaydefinition.h
133+
dialogs/dialogforcemultiplecoils.h
134+
dialogs/dialogforcemultipleregisters.h
135+
dialogs/dialogmsgparser.h
136+
dialogs/dialogprintsettings.h
137+
dialogs/dialogscriptsettings.h
138+
dialogs/dialogselectserviceport.h
139+
dialogs/dialogsetuppresetdata.h
140+
dialogs/dialogsetupserialport.h
141+
dialogs/dialogwindowsmanager.h
142+
dialogs/dialogwritecoilregister.h
143+
dialogs/dialogwriteholdingregister.h
144+
dialogs/dialogwriteholdingregisterbits.h
145+
formatutils.h
146+
htmldelegate.h
147+
jscompleter.h
148+
jsobjects/console.h
149+
jsobjects/script.h
150+
jsobjects/server.h
151+
displaydefinition.h
152+
enums.h
153+
formmodsim.h
154+
jshighlighter.h
155+
jsobjects/storage.h
156+
mainwindow.h
157+
menuconnect.h
158+
modbusdataunitmap.h
159+
modbuslimits.h
160+
modbusmessages/diagnostics.h
161+
modbusmessages/getcommeventcounter.h
162+
modbusmessages/getcommeventlog.h
163+
modbusmessages/maskwriteregister.h
164+
modbusmessages/modbusmessage.h
165+
modbusmessages/modbusmessages.h
166+
modbusmessages/readcoils.h
167+
modbusmessages/readdiscreteinputs.h
168+
modbusmessages/readexceptionstatus.h
169+
modbusmessages/readfifoqueue.h
170+
modbusmessages/readfilerecord.h
171+
modbusmessages/readholdingregisters.h
172+
modbusmessages/readinputregisters.h
173+
modbusmessages/readwritemultipleregisters.h
174+
modbusmessages/reportserverid.h
175+
modbusmessages/writefilerecord.h
176+
modbusmessages/writemultiplecoils.h
177+
modbusmessages/writemultipleregisters.h
178+
modbusmessages/writesinglecoil.h
179+
modbusmessages/writesingleregister.h
180+
modbusmultiserver.h
181+
modbussimulationparams.h
182+
modbuswriteparams.h
183+
numericutils.h
184+
qfixedsizedialog.h
185+
qhexvalidator.h
186+
qint64validator.h
187+
qmodbusadu.h
188+
qmodbusadurtu.h
189+
qmodbusadutcp.h
190+
qrange.h
191+
quintvalidator.h
192+
recentfileactionlist.h
193+
scriptsettings.h
194+
serialportutils.h
195+
windowactionlist.h
196+
)
197+
198+
# UI Forms
199+
set(UI_FILES
200+
controls/outputwidget.ui
201+
controls/scriptcontrol.ui
202+
dialogs/dialogautosimulation.ui
203+
dialogs/dialogcoilsimulation.ui
204+
dialogs/dialogabout.ui
205+
dialogs/dialogdisplaydefinition.ui
206+
dialogs/dialogforcemultiplecoils.ui
207+
dialogs/dialogforcemultipleregisters.ui
208+
dialogs/dialogmsgparser.ui
209+
dialogs/dialogprintsettings.ui
210+
dialogs/dialogscriptsettings.ui
211+
dialogs/dialogselectserviceport.ui
212+
dialogs/dialogsetuppresetdata.ui
213+
dialogs/dialogsetupserialport.ui
214+
dialogs/dialogwindowsmanager.ui
215+
dialogs/dialogwritecoilregister.ui
216+
dialogs/dialogwriteholdingregister.ui
217+
dialogs/dialogwriteholdingregisterbits.ui
218+
formmodsim.ui
219+
mainwindow.ui
220+
)
221+
222+
set(TS_FILES
223+
translations/omodsim_ru.ts
224+
)
225+
226+
set(JSHELP_INPUT "${CMAKE_SOURCE_DIR}/docs/jshelp.qhcp")
227+
set(JSHELP_QCH "${CMAKE_BINARY_DIR}/docs/jshelp.qch")
228+
set(JSHELP_QHC "${CMAKE_BINARY_DIR}/docs/jshelp.qhc")
229+
230+
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/docs)
231+
232+
find_program(QHELP_GENERATOR_EXECUTABLE qhelpgenerator
233+
HINTS "${QT_BIN_DIR}"
234+
NO_DEFAULT_PATH)
235+
if(NOT QHELP_GENERATOR_EXECUTABLE)
236+
find_program(QHELP_GENERATOR_EXECUTABLE qhelpgenerator)
237+
endif()
238+
239+
if(QHELP_GENERATOR_EXECUTABLE)
240+
message(STATUS "qhelpgenerator found at: ${QHELP_GENERATOR_EXECUTABLE}")
241+
else()
242+
message(FATAL_ERROR "qhelpgenerator not found")
243+
endif()
244+
245+
# Link libraries
246+
target_sources(omodsim PRIVATE resources.qrc ${HEADERS} ${SOURCES} ${UI_FILES} ${TS_FILES})
247+
target_link_libraries(omodsim PRIVATE Qt::Widgets Qt::Network Qt::PrintSupport Qt::SerialBus Qt::SerialPort Qt::Qml Qt::Help)
248+
249+
if(Qt6_FOUND)
250+
qt_add_lupdate(omodsim
251+
TS_FILES ${TS_FILES}
252+
SOURCES ${SOURCES} ${HEADERS} ${UI_FILES}
253+
OUTPUT_DIR translations
254+
)
255+
target_link_libraries(omodsim PRIVATE Qt::Core5Compat)
256+
else()
257+
add_custom_command(
258+
OUTPUT ${TS_FILES}
259+
COMMAND ${Qt5_LUPDATE_EXECUTABLE}
260+
${SOURCES} ${HEADERS} ${UI_FILES}
261+
-ts ${TS_FILES}
262+
DEPENDS ${SOURCES} ${HEADERS} ${UI_FILES}
263+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
264+
COMMENT "Updating translation files..."
265+
)
266+
add_custom_target(update_translations ALL DEPENDS ${TS_FILES})
267+
add_dependencies(omodsim update_translations)
268+
endif()
269+
270+
if(WIN32)
271+
string(REPLACE "." ";" VERSION_LIST ${PROJECT_VERSION})
272+
list(GET VERSION_LIST 0 VERSION_MAJOR)
273+
list(GET VERSION_LIST 1 VERSION_MINOR)
274+
list(GET VERSION_LIST 2 VERSION_PATCH)
275+
276+
set(EXECUTABLE_NAME "omodsim")
277+
set(ICON_FILE "${CMAKE_CURRENT_SOURCE_DIR}/res/omodsim.ico")
278+
set(RC_TEMPLATE "${CMAKE_CURRENT_SOURCE_DIR}/omodsim.rc.in")
279+
set(GENERATED_RC "${CMAKE_BINARY_DIR}/omodsim.rc")
280+
281+
configure_file(${RC_TEMPLATE} ${GENERATED_RC} @ONLY)
282+
283+
target_sources(omodsim PRIVATE ${ICON_PATH} ${GENERATED_RC})
284+
set_target_properties(omodsim PROPERTIES WIN32_EXECUTABLE ON)
285+
endif()
286+
287+
add_custom_command(
288+
OUTPUT ${JSHELP_QCH} ${JSHELP_QHC}
289+
COMMAND ${QHELP_GENERATOR_EXECUTABLE} ${JSHELP_INPUT}
290+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs
291+
COMMENT "Generating help files..."
292+
VERBATIM
293+
)
294+
add_custom_target(helpgenerator ALL DEPENDS ${JSHELP_QCH} ${JSHELP_QHC})
295+
add_dependencies(omodsim helpgenerator)

0 commit comments

Comments
 (0)