作者:有海的地方最美_171 | 来源:互联网 | 2023-09-23 12:56
原文地址,翻译完了发现这书是《C++QT设计模式》1.6节的内容……C++应用程序通常由许多源文件,头文件和外部库组成。在一般的项目开发过程中,源文件和库被添加,更改或删除。要bu
原文地址,翻译完了发现这书是《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了,哈哈。)