QtCore / QtGlobal: нет такого файла или каталога

#qt

#qt

Вопрос:

Я пытаюсь создать две библиотеки: одну статическую и одну общую. Проблема в статической библиотеке. У меня есть следующие папки:

 src/
  db/
    dbal.h
    dbal.pro
  dll/
    Distribution.h
    dll.pro
  project.pro
  

база данных статична, а DLL является общей

Distribution.h:

 #ifndef DISTRIBUTION_H_
#define DISTRIBUTION_H_

#include <QtCore/QtGlobal>

#if defined(BUILDING_DLL)
#define DLL_FUNCTION Q_DECL_EXPORT
#else
#define DLL_FUNCTION Q_DECL_IMPORT
#endif

#endif /* DISTRIBUTION_H_ */
  

Теперь вот файл внутри db /, который включает Distribution.h

dbal.h

 #ifndef DBAL_H_
#define DBAL_H_

#include "Distribution.h"

...

#endif
  

db.pro:

 TARGET = db
TEMPLATE = lib
CONFIG = staticlib c  11

QT  = core

INCLUDEPATH  = ../dll

HEADERS  = dbal.h
HEADERS  = dbal_sqlite.h

SOURCES  = dbal.cpp
SOURCES  = dbal_sqlite.cpp

######################################################################
# Build to custom directories
######################################################################

DESTDIR = ../../build/debug/db

OBJECTS_DIR = $$DESTDIR/.obj
MOC_DIR = $$DESTDIR/.moc
RCC_DIR = $$DESTDIR/.qrc
UI_DIR = $$DESTDIR/.ui
  

Когда я запускаю make в db / folder, я получаю следующую ошибку: QtCore / QtGlobal: нет такого файла или каталога. Также кажется, что отсутствуют команды -I.

Вот мой журнал:

 make all 
cd src/db/ amp;amp; ( test -e Makefile || /usr/lib/x86_64-linux-gnu/qt5/bin/qmake /mnt/record/_dev/linux/projects/cdt/wasp/src/db/db.pro -o Makefile ) amp;amp; make -f Makefile all
make[1]: Entering directory `/mnt/record/_dev/linux/projects/cdt/wasp/src/db'
g   -c -m64 -pipe -O2 -std=c  0x  -I/usr/share/qt5/mkspecs/linux-g  -64 -I. -I../dll -o ../../build/debug/db/.obj/dbal.o dbal.cpp
In file included from dbal.h:9:0,
                 from dbal.cpp:3:
../dll/Distribution.h:4:27: fatal error: QtCore/QtGlobal: No such file or directory
 #include <QtCore/QtGlobal>
                           ^
compilation terminated.
  

Комментарии:

1. Какая у вас версия Qt?

2. Ты пробовал #include <QtGlobal> ?

3. Да, никакой работницы. Включение QtCore / QtGlobal работает, когда я запускаю makefile внутри dll /, но оно не работает, когда я добираюсь до makefile в db/

4. Обычно я не компилирую в g , но разве ваши пути -I не должны включать путь включения корня Qt? qt5/mkspecs не содержит заголовков Qt

5. Да, так и должно быть. Как вы думаете, это из-за того, что я пытаюсь скомпилировать статическую библиотеку, что qmake не включает пути включения Qt?

Ответ №1:

Обратите внимание, что журнал:

g -c -m64 -pipe -O2 -std=c 0x -I/usr/share/qt5/mkspecs/linux-g -64 -I. -I../dll -o ../../build/debug/db/.obj/dbal.o dbal.cpp

показывает, что включает пути, предоставленные для g , и не включает путь к QtCore/QtGlobal .

Решение заключается в том, что файлу .pro необходимо

CONFIG = staticlib c 11

быть измененным на:

CONFIG = staticlib c 11

В частности, CONFIG = ... строка удалила qt элемент из конфигурации, таким образом, ваш проект не включал и не связывал файлы Qt.

Ответ №2:

Проблема заключалась в следующей строке:

 CONFIG = staticlib c  11
  

Исправление изменяет его на:

 CONFIG  = staticlib c  11
  

По-видимому, без оператора = я переопределял необходимые значения переменных конфигурации Qt по умолчанию.