Windows下使用MakeFile(Mingw)文件
下面是我基于《C++GUI QT4编程(第二版)》 2.3节快速设计对话框编写例子地址:
https://files.cnblogs.com/files/senior-engineer/gotocell.7z
缘由:本人想在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...
Header: |
#include <QMainWindow> |
qmake: |
QT += widgets |
Inherits: |
发现类QMainWindow继承自QWidget,所以需要添加widgets模块
所以问题根因一步步揭晓:
1.少添加core gui 模块与widgets模块 同时还可以进行版本判断。
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 如有问题欢迎各路大神进行指点...不吝赐教
Windows下使用MakeFile(Mingw)文件的更多相关文章
- 关于windows下的makefile学习
文中部分引用自:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=408225 windows下makefile环境配置见于:http ...
- Windows 下的 Makefile 编写
Windows 下的 Makefile 编写(一)Makefile的基本规则 作者:cntrump Makefile对于很多人来说是陌生的,特别是习惯于使用 IDE 的人来说,似乎没有听说过 Make ...
- windows下编辑过的文件在Linux下用vi打开行尾会多出一个^M符号
一般情况下,windows下编辑过的文件在Linux下用vi打开行尾会多出一个^M符号,如下图: 这是因为Windows等操作系统用的文本换行符和UNIX/Linux操作系统用的不同,Windows系 ...
- windows下自动删除过期文件的脚本
windows下自动删除过期文件的脚本 前言: 比如日志文件每天都产生,时间长了就会有很大的一堆垃圾.整理一下 定时删除文件的方法. 正文: Windows: 定时删除tomcat日志和缓存.可以保留 ...
- Python Windows下打包成exe文件
Python Windows 下打包成exe文件,使用PyInstaller 软件环境: 1.OS:Win10 64 位 2.Python 3.7 3.安装PyInstaller 先检查是否已安装Py ...
- windows下快速修改host文件
windows下快速修改host文件 win+r 输入 notepad c:\Windows\System32\drivers\etc\hosts
- 【Linux】windows下编写的脚本文件,放到Linux中无法识别格式
注意:我启动的时候遇到脚本错误 » sh startup.sh -m standalone tanghuang@bogon : command not found : command not foun ...
- windows下右键新建md文件
windows下右键新建md文件 打开注册表 win键+R打开运行对话框, 输入regedit, 打开注册表编辑器. 修改注册表 在磁盘的任意位置新建一个文件, 后缀名为reg, 并写入一下内容 [H ...
- windows下安装phpcms html/ 文件夹不可写的一种错误以及解决方法
朋友安装phpcms时遇到奇葩问题,环境搭建在windows7中,竟然出现 html/ 和 phpsso_server/caches/文件夹不可写问题(如图) 在windows下出现这种权限的问题真不 ...
随机推荐
- Java 8新增的Lambda表达式
一. 表达式入门 Lambda表达式支持将代码块作为方法参数,lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(这种接口被称为函数式接口)的实例,相当于一个匿名的方法. 1.1 La ...
- 寻找 IBatisNet 批量插入(批量复制) 的心路历程
1.IBatisNet本身就是一个比较早的ORM框架,再加上是从java iBatis移值过来的,其流行程度不是特别高资料也不是很多(一年前),不过最近好像搜索比较多了一些(可能是训练的结果吧) 2. ...
- 解决VMware安装ubuntu16.04后无法全屏的问题
参考教程:http://www.jb51.net/os/Ubuntu/356462.html 双系统经常崩,故在windows10下装了个ubuntu的虚拟机,安装完成后无法全屏,进入系统设置调试显示 ...
- 最长上升子序列 OpenJ_Bailian - 2757 dp模板
第一种是用以前状态更新当前状态(人人为我) 第二种是用当前状态更新以后状态(我为人人) 都是n^2代码: 对于人人为我的更新方法,可以用数据结构储存“人人”对其进行线性\二分优化. ; int a[m ...
- CodeForces - 779D String Game 常规二分
题意:给你两个串,S2是S1 的一个子串(可以不连续).给你一个s1字符下标的一个排列,按照这个数列删数,问你最多删到第几个时S2仍是S1 的一个子串. 题解:二分删掉的数.判定函数很好写和单调性也可 ...
- win7系统注册表的权限修改
重装win7系统后,安装软件时提示注册表项拒绝访问 解决方法: 输入“Gpedit.msc”后回车,打开“组策略”.然后,依次展开“用户配置→管理模板→系统”,双击右侧窗口中的“阻止访问注册表编辑工具 ...
- on条件与where条件的区别(转)
add by zhj: 以为一直以为on和where是等价于,直到看到这篇文章,并亲自测试,才知道原来他们的功能不一样. 可以这样理解:on是在生成连接表的起作用的,where是生成连接表之后对连接表 ...
- 关于static、内部类
1.static不能修饰外部类的原因 static修饰的成员是属于某个类的.而外部类的上一级程序单元是包,所以static不能修饰外部类. 2.外部类,内部类有不同访问权限的原因 外部类的上一级程序单 ...
- Shell初学(四)运算符
一.算术运算符 下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20: 运算符 说明 举例 + 加法 `expr $a + $b` 结果为 30. - 减法 `expr $a - $ ...
- 005-spring boot 2.0.4-jdbc升级
一.概述 Springboot2默认数据库连接池选择了HikariCP为何选择HikariCP理由一.代码量理由二.口碑理由三.速度理由四.稳定性理由五.可靠性HikariCP为什么这么快优化并精简字 ...