Мое приложение использует 2 класса, наследуемых от QObject.Они имеют одно и то же имя (Communication), но находятся в разных пространствах имен («SGBAPI» и «ParamsAPI»).Каждый из них объявляется в одном файле с одинаковыми именами ("communication.h" и "communication.cpp"), но в разных каталогах ("SGB" и "Params").Смотрите снимок экрана:
qMake генерирует предупреждения и происходит сбой компиляции:
Посмотрев make-файл, я обнаружил, что он генерирует один и тот же файл communication.o для обоих файлов communication.cpp.
Что я могу сделать, чтобы решить эту проблему?Конечно, я могу переименовать исходные файлы, но они генерируются автоматически, поэтому я предпочитаю другое решение, если оно есть.
Обновление 1:
.pro файл:
QT += core gui serialport network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = sgbTest
TEMPLATE = app
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
CONFIG += c++11
SOURCES += \
main.cpp \
mainwindow.cpp \
sgb.cpp
SOURCES += $$files(autogenerated/Params/*.cpp, true) $$files(autogenerated/SGB/*.cpp, true) $$files(lib/*.cpp, true)
HEADERS += \
mainwindow.h \
compilationdefines.h \
sgb.h
HEADERS += $$files(autogenerated/Params/*.h, true) $$files(autogenerated/SGB/*.h, true) $$files(lib/*.h, true)
FORMS += \
mainwindow.ui \
lib/com/dlgconnection.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
Обновление 2:
Основываясь на ответе paolo, я попытался использовать
CONFIG += object_parallel_to_source
. Это работает, если класс не наследуется от QObject.Если класс наследует от QObject, Qt по-прежнему генерирует все файлы moc _ *. Cpp в корневом каталоге компиляции и по-прежнему не компилируется.
Обновление 3:
Humвыглядит как ошибка https://bugreports.qt.io/browse/QTBUG-70874