• 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:ProgramFiliesQt5.7.05.7mingw53_32inqmake.exe -o Makefile helloQt.pro
    #############################################################################
    
    MAKEFILE      = Makefile
    
    first: release
    install: release-install
    uninstall: release-uninstall
    QMAKE         = D:ProgramFiliesQt5.7.05.7mingw53_32inqmake.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:QThelloQt>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....ProgramFiliesQt5.7.05.7mingw53_32include -I....Pr
    ogramFiliesQt5.7.05.7mingw53_32includeQtGui -I....ProgramFiliesQt5.7.05
    .7mingw53_32includeQtANGLE -I....ProgramFiliesQt5.7.05.7mingw53_32inclu
    deQtCore -Irelease -I....ProgramFiliesQt5.7.05.7mingw53_32mkspecswin32-g
    ++  -o releasemain.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

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

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

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

      QT += core gui

    
    
      greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

      如有问题欢迎各路大神进行指点...不吝赐教
    努力!从什么时候开始都不晚
     
    分类: Windows
  • 相关阅读:
    20145212 《Java程序设计》第10周学习总结
    20145212 实验五《Java网络编程》
    20145212 《Java程序设计》第9周学习总结
    20145212 实验四《Andoid开发基础》
    《信息安全系统设计基础》第2周总结
    20145210《信息安全系统设计基础》第1周学习总结
    20145210 《信息安全系统设计基础》第0周学习总结
    20145210姚思羽_课程总结
    20145210实验五《Java网络编程》
    20145210 《Java程序设计》第十周学习总结
  • 原文地址:https://www.cnblogs.com/senior-engineer/p/8478874.html
Copyright © 2020-2023  润新知