添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

缘由:本人想在windows下创建Qt工程并编译,安装qt-opensource-windows-x86-mingw530-5.7.0.exe包,使用集成开发环境IDE编译无问题,但是本人想试一下make本地编译生成xxx.exe结果遇到些问题,在此分享

根据QT4.0书上说明构建步骤如下:(以helloQt项目名为例)

1.在命令提示符下,进入hello目录,输入如下命令,生成一个与 平台无关 hello.pro:

qmake -project

2.然后,键入如下命令,从这个项目生成一个与 平台相关 的makefile文件:

qmake helloQt.pro

3.键入make命令就可以构建改程序。

遇到问题:

1.首先windows下没有qmake命令,但是安装完qt-opensource-windows-x86-mingw530-5.7.0.exe包之后,安装目录下就有一个qmake.exe文件,可使用everything工具全盘搜索,即可见到,

现在我们有两种方案,1,在qmake.exe文件夹目录下运行qmake指令(仅限此目录下可以识别qmake);2.添加环境变量到path下,就可以任何目录下运行qmake。

执行完qmake -project命令生成 平台无关 文件helloQt.pro内容如下:

######################################################################
# Automatically generated by qmake (3.0) ?? ?? 16 19:35:06 2016
######################################################################
TEMPLATE = app
TARGET = helloQt
INCLUDEPATH += .
# Input
HEADERS += mainwindow.h ui_mainwindow.h
FORMS += mainwindow.ui
SOURCES += main.cpp mainwindow.cpp

2.执行完qmake helloQt.pro命令生成 平台相关 的makefile文件

#############################################################################
# Makefile for building: helloQt
# Generated by qmake (3.0) (Qt 5.7.0)
# Project:  helloQt.pro
# Template: app
# Command: D:\ProgramFilies\Qt5.7.0\5.7\mingw53_32\bin\qmake.exe -o Makefile helloQt.pro
#############################################################################
MAKEFILE      = Makefile
first: release
install: release-install
uninstall: release-uninstall
QMAKE         = D:\ProgramFilies\Qt5.7.0\5.7\mingw53_32\bin\qmake.exe
DEL_FILE      = del
CHK_DIR_EXISTS= if not exist
MKDIR         = mkdir
COPY          = copy /y
COPY_FILE     = copy /y
COPY_DIR      = xcopy /s /q /y /i
INSTALL_FILE  = copy /y
INSTALL_PROGRAM = copy /y
INSTALL_DIR   = xcopy /s /q /y /i
DEL_FILE      = del
SYMLINK       = $(QMAKE) -install ln -f -s
DEL_DIR       = rmdir
MOVE          = move
SUBTARGETS    =  \
        release \
        debug
......

3.运行make找不到命令,发现安装目录下有一个mingw32-make.exe猜测此文件即是make文件,添加环境变量

运行命令mingw32-make

结果报错,g++命令无法识别,再继续在安装目录下找到g++.exe添加环境变量,

继续运行mingw32-make,报错 mainwindow.h:4:23: fatal error: QMainWindow: No such file or directory

D:\QT\helloQt>mingw32-make
mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory 'D:/QT/helloQt'
g++ -c -pipe -fno-keep-inline-dllexport -O2 -std=gnu++11 -frtti -Wall -Wextra -f
exceptions -mthreads -DUNICODE -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEE
DS_QMAIN -I. -I. -I..\..\ProgramFilies\Qt5.7.0\5.7\mingw53_32\include -I..\..\Pr
ogramFilies\Qt5.7.0\5.7\mingw53_32\include\QtGui -I..\..\ProgramFilies\Qt5.7.0\5
.7\mingw53_32\include\QtANGLE -I..\..\ProgramFilies\Qt5.7.0\5.7\mingw53_32\inclu
de\QtCore -Irelease -I..\..\ProgramFilies\Qt5.7.0\5.7\mingw53_32\mkspecs\win32-g
++  -o release\main.o main.cpp
In file included from main.cpp:1:0:
mainwindow.h:4:23: fatal error: QMainWindow: No such file or directory
compilation terminated.
Makefile.Release:118: recipe for target 'release/main.o' failed
mingw32-make[1]: *** [release/main.o] Error 1
mingw32-make[1]: Leaving directory 'D:/QT/helloQt'
Makefile:34: recipe for target 'release' failed
mingw32-make: *** [release] Error 2

找不到 QMainWindow 头文件,此时无从下手,此helloQt工程是用IDE创建的并且编译没问题,不过此时我再次使用IDE编译发现报同样的错误 mainwindow.h:4:23: fatal error: QMainWindow: No such file or directory

郁闷之极,怎么会找不到这个文件

此时又重新建一个工程对比文件发现IDE生成的helloQt.pro文件有差别,IDE生成的helloQt.pro文件如下:

#-------------------------------------------------
# Project created by QtCreator 2016-10-15T18:10:09
#-------------------------------------------------
QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = qt_empty
TEMPLATE = app
SOURCES += main.cpp\
        mainwindow.cpp
HEADERS  += mainwindow.h

比较发现命令行qmake -project生成的文件helloQt.pro少两行

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

添加完这两行之后运行mingw32-make 编译成功生成helloQt.exe

完美!!!

运行正常!!!

在仔细思考之后发现这两段文字中的粗体部分, 平台无关 平台相关,

1.在命令提示符下,进入hello目录,输入如下命令,生成一个与平台无关hello.pro:

qmake -project

2.然后,键入如下命令,从这个项目生成一个与平台相关的makefile文件:

可能正是这两句话导致我出错,因为我是在windows下运行生成了 平台无关 的hello.pro文件

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

再查阅资料(.pro文件命令格式)发现

QT:指定工程索要使用的QT模块(默认的是core gui,对应于QtCore和QtGui模块)

查阅QT帮助文档

QMainWindow Class

The QMainWindow class provides a main application window. More...

发现类QMainWindow继承自QWidget,所以需要添加widgets模块

所以问题根因一步步揭晓:

1.少添加core gui 模块与widgets模块 同时还可以进行版本判断。

QT += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets


转自:https://www.cnblogs.com/zhangleibo/p/5967560.html