The QT Object header and source are just the auto generated ones when you add a new file. I have multiple other files in this project that build and run just fine if I don’t add any new Q_OBJECT files but as soon as I add a new Q_OBJECT the MOC starts throwing the error listed below. I am fairly new to CMAKE and QT so I am sure I am doing something dumb but I don’t understand how adding a new file autogenerated file ( That I have used for all the other files in the project and those work fine) can cause all the error below. I suspect something is up with my CMAKE configuration but it works for the other files I have in the project. Any help is appreciated.
07:34:55: Running steps for project NitrOS...
07:34:55: Starting: "/home/ajdecker/Qt/Tools/CMake/bin/cmake" --build /home/ajdecker/Documents/build-NitrOS-Desktop_Qt_6_1_0_GCC_64bit-Debug --target all
[0/2 ?/sec] Re-checking globbed directories...
[1/28 80.5/sec] Building CXX object libs/VehicleCommunication/CMakeFiles/VehicleCommunication.dir/src/protocol/protocols/can.cpp.o
[2/28 102.8/sec] Building CXX object libs/VehicleCommunication/CMakeFiles/VehicleCommunication.dir/VehicleCommunication_autogen/mocs_compilation.cpp.o
[3/28 8.1/sec] Automatic MOC and UIC for target gauge-ui
[4/28 10.7/sec] Automatic RCC for Configuration/configuration.qrc
[5/28 13.3/sec] Automatic RCC for Presentation/qml.qrc
[6/28 15.9/sec] Automatic RCC for Presentation/GaugeStyles/gaugestyles.qrc
[7/28 18.3/sec] Automatic RCC for Resources/resources.qrc
[8/28 3.7/sec] Building CXX object apps/gauge-ui/CMakeFiles/gauge-ui.dir/src/Models/DataProvider.cpp.o
[9/28 2.5/sec] Building CXX object libs/VehicleCommunication/CMakeFiles/VehicleCommunication.dir/src/protocol/protocols/simulator.cpp.o
[10/28 2.6/sec] Building CXX object libs/VehicleCommunication/CMakeFiles/VehicleCommunication.dir/src/protocol/protocols/isotp.cpp.o
/home/ajdecker/Documents/NitrOS/libs/VehicleCommunication/src/protocol/protocols/isotp.cpp: In member function ‘virtual bool NitrOS::Vehicle::Protocol::Protocols::ISOTPProtocol::SendMessage(NitrOS::Vehicle::Protocol::BaseVehicleProtocolMessage&)’:
/home/ajdecker/Documents/NitrOS/libs/VehicleCommunication/src/protocol/protocols/isotp.cpp:77:41: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘std::vector<unsigned char>::size_type’ {aka ‘long unsigned int’} [-Wformat=]
77 | fprintf(stderr, "wrote only %d from %d byte\n", retval, msg.GetMessageData().size());
| ~^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| int std::vector<unsigned char>::size_type {aka long unsigned int}
| %ld
[11/28 2.4/sec] Building CXX object apps/gauge-ui/CMakeFiles/gauge-ui.dir/gauge-ui_autogen/mocs_compilation.cpp.o
FAILED: apps/gauge-ui/CMakeFiles/gauge-ui.dir/gauge-ui_autogen/mocs_compilation.cpp.o
/usr/bin/g++ -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_OPENGL_LIB -DQT_QMLMODELS_LIB -DQT_QML_DEBUG -DQT_QML_LIB -DQT_QUICK_LIB -Iapps/gauge-ui -I/home/ajdecker/Documents/NitrOS/apps/gauge-ui -Iapps/gauge-ui/gauge-ui_autogen/include -I/home/ajdecker/Documents/NitrOS/apps/gauge-ui/include -I_deps/json-src/single_include -isystem /home/ajdecker/Qt/6.1.0/gcc_64/include/QtCore -isystem /home/ajdecker/Qt/6.1.0/gcc_64/include -isystem /home/ajdecker/Qt/6.1.0/gcc_64/mkspecs/linux-g++ -isystem /home/ajdecker/Qt/6.1.0/gcc_64/include/QtQuick -isystem /home/ajdecker/Qt/6.1.0/gcc_64/include/QtGui -isystem /home/ajdecker/Qt/6.1.0/gcc_64/include/QtQml -isystem /home/ajdecker/Qt/6.1.0/gcc_64/include/QtNetwork -isystem /home/ajdecker/Qt/6.1.0/gcc_64/include/QtQmlModels -isystem /home/ajdecker/Qt/6.1.0/gcc_64/include/QtOpenGL -g -D DEBUG -fPIC -Wno-error=invalid-offsetof -pthread -std=gnu++17 -MD -MT apps/gauge-ui/CMakeFiles/gauge-ui.dir/gauge-ui_autogen/mocs_compilation.cpp.o -MF apps/gauge-ui/CMakeFiles/gauge-ui.dir/gauge-ui_autogen/mocs_compilation.cpp.o.d -o apps/gauge-ui/CMakeFiles/gauge-ui.dir/gauge-ui_autogen/mocs_compilation.cpp.o -c apps/gauge-ui/gauge-ui_autogen/mocs_compilation.cpp
In file included from apps/gauge-ui/gauge-ui_autogen/mocs_compilation.cpp:6:
apps/gauge-ui/gauge-ui_autogen/RYCJYGFP3B/moc_InstalledDataProvidersModel.cpp:55:6: error: ‘InstalledDataProvidersModel’ has not been declared
55 | void InstalledDataProvidersModel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
apps/gauge-ui/gauge-ui_autogen/RYCJYGFP3B/moc_InstalledDataProvidersModel.cpp:63:19: error: ‘InstalledDataProvidersModel’ has not been declared
63 | const QMetaObject InstalledDataProvidersModel::staticMetaObject = { {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
apps/gauge-ui/gauge-ui_autogen/RYCJYGFP3B/moc_InstalledDataProvidersModel.cpp:74:20: error: ‘InstalledDataProvidersModel’ has not been declared
74 | const QMetaObject *InstalledDataProvidersModel::metaObject() const
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
apps/gauge-ui/gauge-ui_autogen/RYCJYGFP3B/moc_InstalledDataProvidersModel.cpp:74:62: error: non-member function ‘const QMetaObject* metaObject()’ cannot have cv-qualifier
74 | const QMetaObject *InstalledDataProvidersModel::metaObject() const
| ^~~~~
apps/gauge-ui/gauge-ui_autogen/RYCJYGFP3B/moc_InstalledDataProvidersModel.cpp: In function ‘const QMetaObject* metaObject()’:
apps/gauge-ui/gauge-ui_autogen/RYCJYGFP3B/moc_InstalledDataProvidersModel.cpp:76:21: error: ‘QScopedPointer<QObjectData> QObject::d_ptr’ is protected within this context
76 | return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
| ^~~~~
In file included from /home/ajdecker/Qt/6.1.0/gcc_64/include/QtCore/QObject:1,
from apps/gauge-ui/gauge-ui_autogen/6YEA5652QU/../../../../../NitrOS/apps/gauge-ui/include/DataPresenter.h:4,
from apps/gauge-ui/gauge-ui_autogen/6YEA5652QU/moc_DataPresenter.cpp:10,
from apps/gauge-ui/gauge-ui_autogen/mocs_compilation.cpp:2:
/home/ajdecker/Qt/6.1.0/gcc_64/include/QtCore/qobject.h:413:33: note: declared protected here
413 | QScopedPointer<QObjectData> d_ptr;
| ^~~~~
In file included from apps/gauge-ui/gauge-ui_autogen/mocs_compilation.cpp:6:
apps/gauge-ui/gauge-ui_autogen/RYCJYGFP3B/moc_InstalledDataProvidersModel.cpp:76:21: error: invalid use of non-static data member ‘QObject::d_ptr’
76 | return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
| ^~~~~
In file included from /home/ajdecker/Qt/6.1.0/gcc_64/include/QtCore/QObject:1,
from apps/gauge-ui/gauge-ui_autogen/6YEA5652QU/../../../../../NitrOS/apps/gauge-ui/include/DataPresenter.h:4,
from apps/gauge-ui/gauge-ui_autogen/6YEA5652QU/moc_DataPresenter.cpp:10,
from apps/gauge-ui/gauge-ui_autogen/mocs_compilation.cpp:2:
/home/ajdecker/Qt/6.1.0/gcc_64/include/QtCore/qobject.h:413:33: note: declared here
413 | QScopedPointer<QObjectData> d_ptr;
| ^~~~~
In file included from apps/gauge-ui/gauge-ui_autogen/mocs_compilation.cpp:6:
apps/gauge-ui/gauge-ui_autogen/RYCJYGFP3B/moc_InstalledDataProvidersModel.cpp:76:50: error: ‘QScopedPointer<QObjectData> QObject::d_ptr’ is protected within this context
76 | return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
| ^~~~~
In file included from /home/ajdecker/Qt/6.1.0/gcc_64/include/QtCore/QObject:1,
from apps/gauge-ui/gauge-ui_autogen/6YEA5652QU/../../../../../NitrOS/apps/gauge-ui/include/DataPresenter.h:4,
from apps/gauge-ui/gauge-ui_autogen/6YEA5652QU/moc_DataPresenter.cpp:10,
from apps/gauge-ui/gauge-ui_autogen/mocs_compilation.cpp:2:
/home/ajdecker/Qt/6.1.0/gcc_64/include/QtCore/qobject.h:413:33: note: declared protected here
413 | QScopedPointer<QObjectData> d_ptr;
| ^~~~~
In file included from apps/gauge-ui/gauge-ui_autogen/mocs_compilation.cpp:6:
apps/gauge-ui/gauge-ui_autogen/RYCJYGFP3B/moc_InstalledDataProvidersModel.cpp:76:50: error: invalid use of non-static data member ‘QObject::d_ptr’
76 | return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
| ^~~~~
In file included from /home/ajdecker/Qt/6.1.0/gcc_64/include/QtCore/QObject:1,
from apps/gauge-ui/gauge-ui_autogen/6YEA5652QU/../../../../../NitrOS/apps/gauge-ui/include/DataPresenter.h:4,
from apps/gauge-ui/gauge-ui_autogen/6YEA5652QU/moc_DataPresenter.cpp:10,
from apps/gauge-ui/gauge-ui_autogen/mocs_compilation.cpp:2:
/home/ajdecker/Qt/6.1.0/gcc_64/include/QtCore/qobject.h:413:33: note: declared here
413 | QScopedPointer<QObjectData> d_ptr;
| ^~~~~
In file included from apps/gauge-ui/gauge-ui_autogen/mocs_compilation.cpp:6:
apps/gauge-ui/gauge-ui_autogen/RYCJYGFP3B/moc_InstalledDataProvidersModel.cpp: At global scope:
apps/gauge-ui/gauge-ui_autogen/RYCJYGFP3B/moc_InstalledDataProvidersModel.cpp:79:7: error: ‘InstalledDataProvidersModel’ has not been declared
79 | void *InstalledDataProvidersModel::qt_metacast(const char *_clname)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
apps/gauge-ui/gauge-ui_autogen/RYCJYGFP3B/moc_InstalledDataProvidersModel.cpp: In function ‘void* qt_metacast(const char*)’:
apps/gauge-ui/gauge-ui_autogen/RYCJYGFP3B/moc_InstalledDataProvidersModel.cpp:83:35: error: invalid use of ‘this’ in non-member function
83 | return static_cast<void*>(this);
| ^~~~
apps/gauge-ui/gauge-ui_autogen/RYCJYGFP3B/moc_InstalledDataProvidersModel.cpp:84:51: error: cannot call member function ‘virtual void* QAbstractListModel::qt_metacast(const char*)’ without object
84 | return QAbstractListModel::qt_metacast(_clname);
| ^
apps/gauge-ui/gauge-ui_autogen/RYCJYGFP3B/moc_InstalledDataProvidersModel.cpp: At global scope:
apps/gauge-ui/gauge-ui_autogen/RYCJYGFP3B/moc_InstalledDataProvidersModel.cpp:87:5: error: ‘InstalledDataProvidersModel’ has not been declared
87 | int InstalledDataProvidersModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
apps/gauge-ui/gauge-ui_autogen/RYCJYGFP3B/moc_InstalledDataProvidersModel.cpp: In function ‘int qt_metacall(QMetaObject::Call, int, void**)’:
apps/gauge-ui/gauge-ui_autogen/RYCJYGFP3B/moc_InstalledDataProvidersModel.cpp:89:54: error: cannot call member function ‘virtual int QAbstractListModel::qt_metacall(QMetaObject::Call, int, void**)’ without object
89 | _id = QAbstractListModel::qt_metacall(_c, _id, _a);
| ^
[12/28 2.3/sec] Building CXX object apps/gauge-ui/CMakeFiles/gauge-ui.dir/src/DataPresenter.cpp.o
[13/28 2.3/sec] Building CXX object apps/gauge-ui/CMakeFiles/gauge-ui.dir/src/Models/QQmlObjectListModel.cpp.o
[14/28 2.5/sec] Building CXX object apps/gauge-ui/CMakeFiles/gauge-ui.dir/src/Managers/GaugeManager.cpp.o
[15/28 2.4/sec] Building CXX object apps/gauge-ui/CMakeFiles/gauge-ui.dir/src/Models/InstalledDataPresentersModel.cpp.o
/home/ajdecker/Documents/NitrOS/apps/gauge-ui/src/Models/InstalledDataPresentersModel.cpp: In constructor ‘InstalledDataPresentersModel::InstalledDataPresentersModel(QObject*)’:
/home/ajdecker/Documents/NitrOS/apps/gauge-ui/src/Models/InstalledDataPresentersModel.cpp:13:21: warning: ‘std::istream& nlohmann::operator<<(nlohmann::basic_json<>&, std::istream&)’ is deprecated: Since 3.0.0 [-Wdeprecated-declarations]
13 | m_stylesJson << m_stylesFileStream;
| ^~~~~~~~~~~~~~~~~~
In file included from /home/ajdecker/Documents/NitrOS/apps/gauge-ui/include/Models/InstalledDataPresentersModel.h:5,
from /home/ajdecker/Documents/NitrOS/apps/gauge-ui/src/Models/InstalledDataPresentersModel.cpp:1:
_deps/json-src/single_include/nlohmann/json.hpp:20914:26: note: declared here
20914 | friend std::istream& operator<<(basic_json& j, std::istream& i)
| ^~~~~~~~
/home/ajdecker/Documents/NitrOS/apps/gauge-ui/src/Models/InstalledDataPresentersModel.cpp:13:21: warning: ‘std::istream& nlohmann::operator<<(nlohmann::basic_json<>&, std::istream&)’ is deprecated: Since 3.0.0 [-Wdeprecated-declarations]
13 | m_stylesJson << m_stylesFileStream;
| ^~~~~~~~~~~~~~~~~~
In file included from /home/ajdecker/Documents/NitrOS/apps/gauge-ui/include/Models/InstalledDataPresentersModel.h:5,
from /home/ajdecker/Documents/NitrOS/apps/gauge-ui/src/Models/InstalledDataPresentersModel.cpp:1:
_deps/json-src/single_include/nlohmann/json.hpp:20914:26: note: declared here
20914 | friend std::istream& operator<<(basic_json& j, std::istream& i)
| ^~~~~~~~
[16/28 2.3/sec] Building CXX object apps/gauge-ui/CMakeFiles/gauge-ui.dir/src/Models/InstalledDataProvidersModel.cpp.o
[17/28 2.0/sec] Building CXX object apps/gauge-ui/CMakeFiles/gauge-ui.dir/src/main.cpp.o
[18/28 2.1/sec] Building CXX object libs/VehicleCommunication/CMakeFiles/VehicleCommunication.dir/src/obd.cpp.o
ninja: build stopped: subcommand failed.
07:35:04: The process "/home/ajdecker/Qt/Tools/CMake/bin/cmake" exited with code 1.
Error while building/deploying project NitrOS (kit: Desktop Qt 6.1.0 GCC 64bit)
When executing step "Build"
07:35:04: Elapsed time: 00:09
The top level CMAKE file
cmake_minimum_required(VERSION 3.14)
project(NitrOS LANGUAGES CXX)
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core Quick REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Quick REQUIRED)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_compile_options(-D DEBUG)
add_subdirectory(apps)
add_subdirectory(libs)
add_subdirectory(tests)
add_subdirectory(docs)
And the CMAKE file that builds the QT application in question:
include(FetchContent)
file(GLOB GAUGE_UI_PROJECT_SOURCES CONFIGURE_DEPENDS
"${NitrOS_SOURCE_DIR}/apps/gauge-ui/Configuration/*.qrc"
"${NitrOS_SOURCE_DIR}/apps/gauge-ui/Presentation/*.qrc"
"${NitrOS_SOURCE_DIR}/apps/gauge-ui/Presentation/GaugeStyles/*.qrc"
"${NitrOS_SOURCE_DIR}/apps/gauge-ui/Resources/*.qrc"
"${NitrOS_SOURCE_DIR}/apps/gauge-ui/src/*.cpp"
"${NitrOS_SOURCE_DIR}/apps/gauge-ui/src/Models/*.cpp"
"${NitrOS_SOURCE_DIR}/apps/gauge-ui/src/Managers/*.cpp"
)
file(GLOB GAUGE_UI_PROJECT_HEADERS CONFIGURE_DEPENDS
"${NitrOS_SOURCE_DIR}/apps/gauge-ui/include/*.h"
"${NitrOS_SOURCE_DIR}/apps/gauge-ui/include/Models/*.h"
"${NitrOS_SOURCE_DIR}/apps/gauge-ui/include/Managers/*.h"
)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(gauge-ui
${GAUGE_UI_PROJECT_SOURCES}
${GAUGE_UI_PROJECT_HEADERS}
)
else()
if(ANDROID)
add_library(gauge-ui SHARED
${GAUGE_UI_PROJECT_SOURCES}
)
else()
add_executable(gauge-ui
${GAUGE_UI_PROJECT_SOURCES}
${GAUGE_UI_PROJECT_HEADERS}
)
endif()
endif()
FetchContent_Declare(json
GIT_REPOSITORY https://github.com/nlohmann/json
GIT_TAG v3.7.3)
FetchContent_GetProperties(json)
if(NOT json_POPULATED)
FetchContent_Populate(json)
add_subdirectory(${json_SOURCE_DIR} ${json_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
set(JSON_BuildTests OFF CACHE INTERNAL "")
target_compile_definitions(gauge-ui
PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
target_include_directories(gauge-ui PUBLIC "${NitrOS_SOURCE_DIR}/apps/gauge-ui/include/")
target_link_libraries(gauge-ui
PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Quick PRIVATE nlohmann_json::nlohmann_json)