设为首页 收藏本站
查看: 1149|回复: 0

[经验分享] Windows下使用MakeFile(Mingw)文件

[复制链接]

尚未签到

发表于 2017-6-27 16:21:28 | 显示全部楼层 |阅读模式
  缘由:本人想在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:

  QWidget


  • List of all members, including inherited members
  发现类QMainWindow继承自QWidget,所以需要添加widgets模块
  所以问题根因一步步揭晓:
  1.少添加core gui 模块与widgets模块 同时还可以进行版本判断。
    QT += core gui


  greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

  如有问题欢迎各路大神进行指点...不吝赐教

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-388816-1-1.html 上篇帖子: Windows安装mysql 5.7.*.zip步骤 下篇帖子: Windows下安装Nginx+php+mysql环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表