Компиляция QT, не удается найти включает

#c #qt #include

#c #qt #включить

Вопрос:

Я пытаюсь скомпилировать код QT, но по какой-то причине компилятор жалуется, что не может найти включаемые файлы, даже если я указал их пути в моем makefile

asd.cpp

 #include <QtWidgets/qtwidgetsglobal.h>

int main(int argc, char **argv)
{

}
 

Команда компиляции

 g   -I. -I/home/marti/Qt/6.2.2/gcc_64/include/QtCore -I/home/marti/Qt/6.2.2/gcc_64/include/QtGui -I/home/marti/Qt/6.2.2/gcc_64/include/QtWidgets -c asd.cpp -o out/asd.o
 

Ошибка

 asd.cpp:1:10: fatal error: QtWidgets/qtwidgetsglobal.h: No such file or directory
    1 | #include <QtWidgets/qtwidgetsglobal.h>
  |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

Как вы можете видеть, я указал путь к QtWidgets ..Я понятия не имею, почему он не может найти QtWidgets/qtwidgetsglobal.h

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

1. Попробуйте вместо этого #include <qtwidgetsglobal.h>

2. Если вы пытаетесь #include <QtWidgets/qtwidgetsglobal.h> , то параметр компилятора, вероятно, должен быть -I/home/marti/Qt/6.2.2/gcc_64/include . Обратите внимание, однако, что qtwidgetsglobal.h это не документированный заголовок. Вместо этого вы должны указать требуемые реальные заголовки.

3. @G.M. Ах да.. Я действительно должен перейти на -I/home/marti/Qt/6.2.2/gcc_64/include , и это работает. Спасибо!

4. Или используйте правильную систему сборки, например, qmake или cmake, которая добавляет эти включения и библиотеки гораздо более разумным способом.

Ответ №1:

Обратите внимание, что вы не включаете файлы заголовков напрямую. Вместо этого вы включаете «псевдонимы». В вашем случае вы, вероятно, просто хотите:

 # include <QWidget>
 

Смотрите также документацию для QWidget, в которой явно указано, что в самом верху страницы.