zoukankan      html  css  js  c++  java
  • [翻译学习]qmake, Project Files 与 Makefile

    原文地址,翻译完了发现这书是《C++QT设计模式》1.6节的内容……

    C++应用程序通常由许多源文件,头文件和外部库组成。在一般的项目开发过程中,源文件和库被添加,更改或删除。要build一个能反映项目当前状态的可执行文件,这些变更要求编译所有受影响的文件,并将生成的对象文件进行正确链接。这种changing-rebuilding的过程通常会发生很多次。

    追踪这样一个项目中的所有部分需要一种机制,能精确地指定涉及到的输入文件,build所需工具,中间目标及其依赖关系,以及最终的可执行目标。

    最广泛应用的编译工程的工具是make。Make从Makefile里读取项目规格(project specifications )的细节以及编译器说明。Makefile类似于shell脚本但是至少包含以下内容:

    • 编译某些类型文件的规则(Rules),例如要从一个*.cpp文件获取一个*.o文件,你必须为cpp文件执行gcc -c。
    • 包含项目所需的所有源文件和头文件名称的源文件(Sources)和头文件(Headers)列表。
    • 指定哪些可执行文件/库必须被build的目标文件(targets)
    • 列出当某些文件变更时需要重新build哪些目标的依赖关系(Dependencies )

    make命令默认载入当前工作路径下名为Makefile的文件并且执行制定的build步骤(编译和链接)

    使用make的直接好处是,它不盲目地每次都编译所有文件,而只重新编译发生变更或被其他变更影响到的文件。

    图1.1显示了build QT应用所涉及到的步骤。

    使用QT,让编程人员不再需要编写makefile了。QT提供了一个叫qmake的工具来生成Makefiles。以某种方式运行make并理解它的输出还是必要的。大部分IDE通过一个按钮或者类似的东西来执行make并显示或过滤它的输出。

    要创建一个Makefile,qmake需要一个工程文件(*.pro)。一个工程文件记录了build工程所需的所有其他文件、配置(options)以及文件位置。工程文件比Makefile更简单,也更易被用户创建。同时,虽然程序员很容易就能创建一个工程文件,qmake依然能使用qmake -project命令来生成一个简单的工程文件,qmake会记录当前工作目录下所有的源文件(*.cpp)和头文件(*.h)作为Sources and Headers。生成的工程文件将命名为命令参数-o后的部分。如果没有加-o参数或者-o指定的名字为空,qmake会用当前工作路径来命名工程文件以及最终的可执行文件。

    在工程文件被创建后,qmake命令会基于工程文件创建makefile。接着,make命令能按照makefile中的说明去试着build一个可执行文件。可执行文件名由TARGET变量定义,默认是project名。

    下面的记录显示了如何用qmake来build一个我们讨论、编译并运行的例1.1种的小程序。每步骤被新创建出来的文件为斜体。(译注:斜体在这里面不明显,我加粗了)

    src/early-examples/example0> ls
    fac.cpp
    src/early-examples/example0> qmake -project
    src/early-examples/example0> ls
    example0.pro fac.cpp                           # 因为文件夹名字是example0,所以工程文件名也是了
    src/early-examples/example0> cat example0.pro
    
    TEMPLATE = app
    TARGET =
    DEPENDPATH += .
    INCLUDEPATH += .
    
    # Input
    SOURCES += fac.cpp                           #这个文件夹下原来就这个文件
    src/early-examples/example0> qmake
    src/early-examples/example0> ls
    example0.pro fac.cpp Makefile                #makefile出来了
    src/early-examples/example0> make
    g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB
      -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I.
      -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore
      -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4
      -I. -I. -I. -o fac.o fac.cpp
    g++ -o example0 fac.o  -L/usr/lib -lQtGui -lQtCore -lpthread
    src/early-examples/example0> ls
    example0 example0.pro fac.cpp fac.o Makefile #可执行文件出来了
    src/early-examples/example0>

    注意,你能看到执行make时候传的参数,如果遇到任何错误,你也将看到它们。现在你可以运行这个应用程序了。

    今后你应当使用qmake和make来做编译链接,而不是直接从命令行运行编译器。这大大简化了build过程,特别是项目包含多个源文件、头文件和库文件的时候。(译注:我这种小白当然是用qtcreator了,哈哈。)

  • 相关阅读:
    线性代数之行列式的C#研究实现
    政府部门域名系统杂谈
    C#实现在foreach中删除集合中的元素
    RestServer 2.0 正式版发布
    常见的几种开源协议
    PostgreSQL学习手册(常用数据类型)
    一个很简单的淘宝优惠券搜索助手 大家看看有没有用吧
    做了一个淘宝内部优惠券分享平台支持微信公众号以及网站
    二十三种设计模式之原型模式的C#实现
    arcgis,mapinfo(mapxtreme),openlayers专业GIS系统开发
  • 原文地址:https://www.cnblogs.com/zhuyc110/p/6736666.html
Copyright © 2011-2022 走看看