QT Build Errors in MOC from adding new basic Q_OBJECT. CMAKE & QT6

Viewed 168

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)
0 Answers
Related