diff --git a/.gitignore b/.gitignore
index 34a7ee7b706f048de564cc13faadd14d16c5c0b1..ffdfc5a1b258344c3c77b156362efcd922f899cd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
 SkywardHub.pro.user
 SkywardHub.pro.user.*
 .build
+build/**
 **/.DS_Store
 Deploy/*
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..13c7a13416a72d597d0c9824476839fd270ab7f5
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,76 @@
+cmake_minimum_required(VERSION 3.1.0)
+
+project(skywardhub VERSION 1.0.0 LANGUAGES CXX)
+
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+find_package(Qt5 COMPONENTS Widgets REQUIRED)
+find_package(Qt5 COMPONENTS SerialPort REQUIRED)
+find_package(Qt5 COMPONENTS PrintSupport REQUIRED)
+
+add_executable(skywardhub
+    Components/ContextMenuSeparator/contextmenuseparator.cpp
+    Components/ModulesPicker/modulespicker.cpp
+    Components/SaveConfigurationDialog/saveconfigurationdialog.cpp
+    Components/SubscriptionsPanel/subscriptionspanel.cpp
+    Components/ToggleButton/togglebutton.cpp
+    Components/ErrorDisplayer/error.cpp
+    Components/ErrorDisplayer/errordisplayer.cpp
+    Components/TopicAndFieldFilterSelector/topicandfieldfilterselector.cpp
+    Components/TopicFilterSelector/topicfilterselector.cpp
+    Core/Message/messagefield.cpp
+    Core/Message/modulemessage.cpp
+    Core/Message/topic.cpp
+    Core/Message/topicandfieldfilter.cpp
+    Core/Message/topicfilter.cpp
+    Core/QCustomPlot/QCustomPlot.cpp
+    Core/module.cpp
+    Core/moduleeventshandler.cpp
+    Core/modulemessagesbroker.cpp
+    Core/modulesmanager.cpp
+    Core/skywardhubcore.cpp
+    Core/xmlobject.cpp
+    Modules/CommandPad/CommandPad.cpp
+    Modules/CommandPad/MessageFormElement.cpp
+    Modules/CompactCommandPad/CompactCommandPad.cpp
+    Modules/CompactCommandPad/CommandSelector.cpp
+    Modules/DefaultModule/defaultmodule.cpp
+    Modules/Empty/emptymodule.cpp
+    Modules/FileStream/filestreammodule.cpp
+    Modules/Graph/Graph.cpp
+    Modules/IncomingMessagesViewer/incomingmessagesviewermodule.cpp
+    Modules/MainWindow/skywardhubmainwindow.cpp
+    Modules/MainWindow/window.cpp
+    Modules/Mavlink/mavlinkcommandadapter.cpp
+    Modules/Mavlink/mavlinkmodule.cpp
+    Modules/Mavlink/mavlinkreader.cpp
+    Modules/Mavlink/mavlinkrocketmsgtestingmodule.cpp
+    Modules/Mavlink/mavlinkwriter.cpp
+    Modules/OutgoingMessagesViewer/outgoingmessagesviewermodule.cpp
+    Modules/SkywardHub/deployer.cpp
+    Modules/SkywardHub/deployerpathpicker.cpp
+    Modules/SkywardHub/prefabdialog.cpp
+    Modules/SkywardHub/prefabviewelement.cpp
+    Modules/SkywardHub/skywardhubmodule.cpp
+    Modules/Splitter/Splitter.cpp
+    Modules/StateViewer/StateViewer.cpp
+    Modules/Tabs/tabsmodule.cpp
+    Modules/Test/testmodule.cpp
+    Modules/TimerController/timercontrollermodule.cpp
+    Modules/ValuesConverterViewer/valueelement.cpp
+    Modules/ValuesConverterViewer/valuesconverterviewermodule.cpp
+    Modules/ValuesConverterViewer/valuesviewerconfigpanel.cpp
+    Modules/moduleinfo.cpp
+    Modules/moduleslist.cpp
+    main.cpp
+    application.qrc
+)
+target_include_directories(skywardhub PRIVATE ./)
+target_link_libraries(skywardhub Qt5::Widgets)
+target_link_libraries(skywardhub Qt5::SerialPort)
+target_link_libraries(skywardhub Qt5::PrintSupport)
diff --git a/Components/ModulesPicker/modulespicker.h b/Components/ModulesPicker/modulespicker.h
index 24fb66000213e098dce286ff8e5f7903bc0501d2..53c3ee59fdbc6e329bf24f54f94238d731ff4888 100644
--- a/Components/ModulesPicker/modulespicker.h
+++ b/Components/ModulesPicker/modulespicker.h
@@ -1,20 +1,23 @@
 #ifndef MODULESPICKER_H
 #define MODULESPICKER_H
 
-#include <QWidget>
-#include <QSharedPointer>
-#include <QPushButton>
+#include <Core/module.h>
+
 #include <QDialog>
-#include "Core/module.h"
+#include <QPushButton>
+#include <QSharedPointer>
+#include <QWidget>
 
-namespace Ui {
+namespace Ui
+{
 class ModulesPicker;
 }
 
-class ModulesPicker : public QDialog {
+class ModulesPicker : public QDialog
+{
     Q_OBJECT
 
-  public:
+public:
     explicit ModulesPicker();
     ~ModulesPicker() override;
 
@@ -27,20 +30,20 @@ class ModulesPicker : public QDialog {
     //    XmlObject toXmlObject() override;
     //    void fromXmlObject(const XmlObject &xmlObject) override;
 
-  signals:
+signals:
     void moduleSelected(Module* selectedModule);
 
-  protected:
+protected:
     void createAndConnectUI();
     void connectSlot(QPushButton* button);
     void onCreateModuleButtonClick();
     QPushButton* createButton(const QString& name);
 
-  private:
+private:
     void createSplitter(Qt::Orientation orientation);
 
     Ui::ModulesPicker* ui;
     Module** selectedModule = nullptr;
 };
 
-#endif // MODULESPICKER_H
+#endif  // MODULESPICKER_H
diff --git a/Core/Message/messagefield.cpp b/Core/Message/messagefield.cpp
index 3c126a67829ec14339e2560d650a9ae9c7ec7b93..ca15e21098cffa6838f8328d12b53ec6ec58f9db 100644
--- a/Core/Message/messagefield.cpp
+++ b/Core/Message/messagefield.cpp
@@ -255,6 +255,8 @@ bool MessageField::operator==(const MessageField& rhs) const {
         case Type::EMPTY:
             return true;
     }
+
+    return false;
 }
 
 MessageField::Type MessageField::getType() const {