Qt中的Makefile文件编写体会
摘要 Linux编程中会用到Makefile文件来对多个文件实现联合编译以及安装、制作发布文档等,其功能强大。但是完整的Makefile文件如果完全用手工编写,复杂繁琐,基于此,本文介绍两种Makefile文件编写方法,实现基本的多文件联合编译功能。
关键词 Makefile;qmake;项目文件
中图分类号TP39 文献标识码A 文章编号 1674-6708(2010)30-0250-02
以C++编程为例。C编程类似。系统为RedHat Linux 7.2;桌面为KDE ;文本编辑器为kate。假定读者编写了两个文件hello.cpp, world.cpp。hello.cpp为主程序,在工作目录下建立一个新的子目录”test”,再在test下建立一个”helloworld”的子目录,这个目录将作为存放hello这个程序及其相关文件的地方:
% mkdir test
% cd test
% mkdir helloworld
% cd helloworld
将hello.cpp及world.cpp文件copy至helloworld目录下。
使用文本编辑器生成一个新文件,命名为makefile,无需加文件后缀。
新文件内容为:
test: hello.o, world.o //test为我们所要生成的目标可执行文件名
g++ -o test hello.o world.o //注意该行行首并非是空格,而是制表符,
//需要使用Tab键来生成。否则会报“Missing Separator”并停止
hello.o: hello.cpp
g++ -Wall ?Cc hello.cpp //该行行首是制表符
world.o: world.cpp
g++ -Wall ?Cc world.cpp //该行行首是制表符
all: test
.PHONY : clean
clean:
-rm *.o//该行行首是制表符
保存该文件。在命令行下打make即可实现对文件的联合编译。如果源程序没有错误,编译成功后,就可以在命令行打入
% ./test
执行程序了。
如果加后缀进行编译
% make clean
表示编译完成后执行rm *.o语句:删除编译过程中生成的中间文件。
制作实现对C程序联合编译的makefile文件类似,所要修改的地方是:
在makefile文件中,将g++以gcc代替,即修改相应的编译器(g++是C++的编译器,而gcc是C的编译器);并以后缀为.c的C源程序代替后缀为.cpp的C++源程序。
Makefile = target(目标)+dependencies(关联)+command(命令)
读者可能已经注意到,makefile文件实际上是由一些目标、关联和命令(或者说是动作)组合而成的规则集。Makefile是一个文本形式的数据库,其中包含一些规则告诉make编译哪些文件、怎样编译以及在什么条件下去编译。每条规则包含以下内容:一个“目标体”(target),即make最终需要创建的东西。包含一个或多个“依赖体”(dependency)的列表,依赖体通常是编译目标体需要的其它文件为了从指定的依赖体创建除目标体所需执行的“命令”(command)的列表。在makefile文件中,出现命令的该行行首总是以制表符开始,而不是空格,这要注意。
qmake是Trolltech公司创建的用来为不同的平台和编译器书写Makefile的工具。 qmake是用来为不同的平台的开发项目创建makefile的Trolltech开发一个易于使用的工具。qmake简
化了makefile的生成,所以为了创建一个makefile只需要一个只有几行信息的文件。qmake可以供任何一个软件项目使用,而不用管它是不是用Qt写的,尽管它包含了为支持Qt开发所拥有的额外的特征。
qmake基于一个项目文件这样的信息来生成makefile。项目文件可以由开发者生成。项目文件通常很简单,但是如果需要它是非常完善的。不用修改项目文件,qmake也可以为Microsoft Visual Studio生成项目。
QMAKESPEC环境变量
举例来说,如果你在Windows下使用Microsoft Visual Studio,然后你需要把QMAKESPEC环境变量设置为win32-msvc。如果你在Solaris上使用gcc,你需要把QMAKESPEC环境变量设置为solaris-g++。
在qt/mkspecs中的每一个目录里面,都有一个包含了平台和编译器特定信息的f文件。这些设置适用于你要使用qmake的任何项目,请不要修改它,除非你是一个专家。例如,假如你所有的应用程序都必须和一个特定的库连接,你可以把这个信息添加到相应的f文件中。
项目(.pro)文件
一个项目文件是用来告诉qmake关于为这个应用程序创建makefile所需要的细节。例如,一个源文件和头文件的列表、任何应用程序特定配置、例如一个必需要连接的额外库、或者一个额外的包含路径,都应该放到项目文件中。
使用qmake创建一个项目文件
qmake使用储存在项目(.pro)文件中的信息来决定Makefile文件中该生成什么。
一个基本的项目文件包含关于应用程序的信息,比如,编译应用程序需要哪些文件,并且使用哪些配置设置。
这里是一个简单的示例项目文件:
SOURCES = hello.cpp
HEADERS = hello.h
CONFIG += qt warn_on release
SOURCES = hello.cpp
这一行指定了实现应用程序的源程序文件。在这个例子中,恰好只有一个文件,hello.cpp。大部分应用程序需要多个文件,这种情况下可以把文件列在一行中,以空格分隔,就像这样:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论