使用qmake工具构建QT应用程序
2009-08-12 21:26
507 查看
moc命令:用于处理含Q_OBJECT语句(即用到时了信号和槽)的QT类定义头文件(或源文件),以产生出包含QT元对象代码的标准头文件,这样经过处理后的头文件才能在源文件中使用。注意若用qmake工具来构建QT程序,可以设置规则来自动运行moc,无需我们直接运行moc来处理头文件
qmake是一个跨平台的程序,使用qmake来构建QT应用程序的步骤:
qmake -project:收集项目信息,比如源文件、头文件、目标二进制文件、库位置等,生成一个跨平台的.pro项目文件(也可自己编写),这个文件用来生成Makefile文件
qmake(-makefile):根据.pro文件生成Makefile文件。接下来就可以运行make工具来编译项目了
.pro文件的格式:
TEMPLATE=app:指定模板变量,表示生成的Makefile类型。app(为默认值)建立应用程序的makefile;lib建立库的makefile;vcapp建立应用程序的Visual Studio项目文件;vclib建立库的Visual Studio项目文件;subdirs创建子目录编译方式的makefile
SUBDIRS=src1:指定子目录
TARGET=filename:指定生成的应用程序名(默认为项目名)
DEPENDPATH+=.:指定程序编译时依赖的相关路径(+=表示追加,=则表示直接指定,下面类同)
INCLUDEPATH+=.:指定头文件包含路径
DESTDIR+=bin:指定应用程序放置的目录
UI_DIR+=form:指定ui界面文件生成的头文件存放目录(ui文件会由uic命令处理并生成ui_*.h头文件)
RCC_DIR+=qrc:指定qrc资源文件生成的头文件存放目录(rcc命令会将.qrc文件转换成qrc_*.h文件)
MOC_DIR+=moc:指定moc生成的头文件存放目录(moc命令将含Q_OBJECT的头文件转换成标准.h文件)
OBJECTS_DIR+=obj:指定目标文件存放的目录
CONFIG+=qt warn_on release:指定编译配置信息,如qt表示用QT库来编译,warn_on把编译器设为输出警告信息,release编译为发布程序,还有debug、debug_and_release等
message($$(PATH)):用于qmake构建时产生消息。$${a}表示读取变量a的字符串,$$(PATH)读取环境变量PATH
win32{ }:添加作用域,把语句放在作用域中,则在其他平台上运行时会忽略
exit():测试一个文件是否存在
error():停止运行qmake,并打印一条错误消息
HEADERS+=hello.h:指定头文件
SOURCES+=filename.cpp:指定源文件
FORMS+=form/filename.ui:指定.ui界面设计文件
RESOURCES+=qrc/painter.qrc:指定.qrc资源文件
下面是QT 4.5版的一个项目文件例子:
下面来构建一个简单的QT项目ButtonWindow(程序原型来自于<<Linux程序设计(第3版)>>)。程项目有两个文件ButtonWindow.h、ButtonWindow,如下:
由于用到了信号与槽,含有O_OBJECT语句,故要修改项目文件使其自动运行moc。
(1)运行qmake,生成ButtonWindow.pro项目文件。
(2)修改ButtonWindow.pro文件,增加MOC_DIR指定moc文件存放的目录,这样就会自动运行moc来处理头文件。还可增加OBJECTS_DIR指定目标文件存放的目录。修改后的项目文件如下:
(3)运行qmake,根据项目文件来生成Makefile文件。根据配置,还生成了两个子目录moc和obj。
(4)接下来就可以用make来编译项目了,moc处理生成的文件会放在moc子目录下,编译生成的.o目标文件会放在obj子目录下。
用./ButtonWindow即可运行生成的程序。
qmake是一个跨平台的程序,使用qmake来构建QT应用程序的步骤:
qmake -project:收集项目信息,比如源文件、头文件、目标二进制文件、库位置等,生成一个跨平台的.pro项目文件(也可自己编写),这个文件用来生成Makefile文件
qmake(-makefile):根据.pro文件生成Makefile文件。接下来就可以运行make工具来编译项目了
.pro文件的格式:
TEMPLATE=app:指定模板变量,表示生成的Makefile类型。app(为默认值)建立应用程序的makefile;lib建立库的makefile;vcapp建立应用程序的Visual Studio项目文件;vclib建立库的Visual Studio项目文件;subdirs创建子目录编译方式的makefile
SUBDIRS=src1:指定子目录
TARGET=filename:指定生成的应用程序名(默认为项目名)
DEPENDPATH+=.:指定程序编译时依赖的相关路径(+=表示追加,=则表示直接指定,下面类同)
INCLUDEPATH+=.:指定头文件包含路径
DESTDIR+=bin:指定应用程序放置的目录
UI_DIR+=form:指定ui界面文件生成的头文件存放目录(ui文件会由uic命令处理并生成ui_*.h头文件)
RCC_DIR+=qrc:指定qrc资源文件生成的头文件存放目录(rcc命令会将.qrc文件转换成qrc_*.h文件)
MOC_DIR+=moc:指定moc生成的头文件存放目录(moc命令将含Q_OBJECT的头文件转换成标准.h文件)
OBJECTS_DIR+=obj:指定目标文件存放的目录
CONFIG+=qt warn_on release:指定编译配置信息,如qt表示用QT库来编译,warn_on把编译器设为输出警告信息,release编译为发布程序,还有debug、debug_and_release等
message($$(PATH)):用于qmake构建时产生消息。$${a}表示读取变量a的字符串,$$(PATH)读取环境变量PATH
win32{ }:添加作用域,把语句放在作用域中,则在其他平台上运行时会忽略
exit():测试一个文件是否存在
error():停止运行qmake,并打印一条错误消息
HEADERS+=hello.h:指定头文件
SOURCES+=filename.cpp:指定源文件
FORMS+=form/filename.ui:指定.ui界面设计文件
RESOURCES+=qrc/painter.qrc:指定.qrc资源文件
下面是QT 4.5版的一个项目文件例子:
TEMPLATE = app TARGET = DEPENDPATH += . INCLUDEPATH += . # Input SOURCES += main.cpp SOURCES += glwidget.cpp SOURCES += mainwindow.cpp SOURCES += bubble.cpp HEADERS += glwidget.h HEADERS += mainwindow.h HEADERS += bubble.h RESOURCES += texture.qrc QT += opengl # install target.path = $$[QT_INSTALL_EXAMPLES]/opengl/hellogl_es2 sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS hellogl_es2.pro sources.path = $$[QT_INSTALL_EXAMPLES]/opengl/hellogl_es2 INSTALLS += target sources
下面来构建一个简单的QT项目ButtonWindow(程序原型来自于<<Linux程序设计(第3版)>>)。程项目有两个文件ButtonWindow.h、ButtonWindow,如下:
// ButtonWindow.h #include <QMainWindow> class ButtonWindow:public QMainWindow{ Q_OBJECT public: ButtonWindow(QWidget *parent=0,Qt::WindowFlags flags=0); virtual ~ButtonWindow(); private slots: void Clicked(); };
// ButtonWindow.cpp #include "ButtonWindow.h" #include <QPushButton> #include <QApplication> #include <iostream> ButtonWindow::ButtonWindow(QWidget *parent,Qt::WindowFlags flags):QMainWindow(parent,flags){ //this->setCaption("This is the window Title"); QPushButton *button=new QPushButton("Click Me!",this); button->setGeometry(50,30,70,20); connect(button,SIGNAL(clicked()),this,SLOT(Clicked())); } ButtonWindow::~ButtonWindow(){ } void ButtonWindow::Clicked(void){ std::cout<<"clicked!/n"; } int main(int argc,char *argv[]){ QApplication app(argc,argv); ButtonWindow *window=new ButtonWindow(); app.setActiveWindow(window); window->show(); return app.exec(); }
由于用到了信号与槽,含有O_OBJECT语句,故要修改项目文件使其自动运行moc。
(1)运行qmake,生成ButtonWindow.pro项目文件。
zhouhuansheng@laptop-zhou:~/zhou/linux_programming/17/ButtonWindow$ ls ButtonWindow.cpp ButtonWindow.h zhouhuansheng@laptop-zhou:~/zhou/linux_programming/17/ButtonWindow$ qmake -project zhouhuansheng@laptop-zhou:~/zhou/linux_programming/17/ButtonWindow$ ls ButtonWindow.cpp ButtonWindow.h ButtonWindow.pro
(2)修改ButtonWindow.pro文件,增加MOC_DIR指定moc文件存放的目录,这样就会自动运行moc来处理头文件。还可增加OBJECTS_DIR指定目标文件存放的目录。修改后的项目文件如下:
###################################################################### # Automatically generated by qmake (2.01a) Wed Aug 12 21:16:15 2009 ###################################################################### TEMPLATE = app TARGET = ButtonWindow MOC_DIR = moc OBJECTS_DIR = obj DEPENDPATH += . INCLUDEPATH += . # Input HEADERS += ButtonWindow.h SOURCES += ButtonWindow.cpp
(3)运行qmake,根据项目文件来生成Makefile文件。根据配置,还生成了两个子目录moc和obj。
zhouhuansheng@laptop-zhou:~/zhou/linux_programming/17/ButtonWindow$ qmake zhouhuansheng@laptop-zhou:~/zhou/linux_programming/17/ButtonWindow$ ls ButtonWindow.cpp ButtonWindow.h ButtonWindow.pro Makefile moc obj
(4)接下来就可以用make来编译项目了,moc处理生成的文件会放在moc子目录下,编译生成的.o目标文件会放在obj子目录下。
zhouhuansheng@laptop-zhou:~/zhou/linux_programming/17/ButtonWindow$ 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. -Imoc -I. -o obj/ButtonWindow.o ButtonWindow.cpp /usr/bin/moc-qt4 -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. -Imoc -I. ButtonWindow.h -o moc/moc_ButtonWindow.cpp 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. -Imoc -I. -o obj/moc_ButtonWindow.o moc/moc_ButtonWindow.cpp g++ -Wl,--no-undefined -o ButtonWindow obj/ButtonWindow.o obj/moc_ButtonWindow.o -L/usr/lib -lQtGui -lQtCore -lpthread zhouhuansheng@laptop-zhou:~/zhou/linux_programming/17/ButtonWindow$ ls ButtonWindow ButtonWindow.cpp ButtonWindow.h ButtonWindow.pro Makefile moc obj
用./ButtonWindow即可运行生成的程序。
相关文章推荐
- 使用qmake工具构建QT应用程序
- 使用qmake工具构建QT应用程序
- 使用QT的qmake工具生成VS工程
- 使用Rational开发工具构建SOA中间件应用程序
- 使用Gradle构建工具开发Kotlin Web应用程序
- 使用ant工具——构建一个简单的Hibernate应用程序
- 使用QT的qmake工具生成VS工程 .
- 使用QT的qmake工具生成VS工程
- 使用Qt构建ROS应用程序
- Qt程序发行Linux版,软件打包知识(patchelf 工具修改依赖库,确认 qmake -v 是自己使用的Qt版本,否则用export PATH进行修改)good
- 使用QT的qmake工具生成VS工程
- 使用Maven构建工具开发Kotlin Web应用程序
- 使用 Bluemix 和 AppScan Mobile Analyzer 服务构建一个 Android 应用程序安全测试工具
- 使用QT的qmake工具生成VS工程
- 交叉编译工具和qt安装,终端使用qmake编译arm版本可执行文件的方法
- c++构建工具之make使用小结
- 自动构建工具Ant的使用-笔记
- Java项目开发环境构建工具 Gradle 使用笔记(简单、基本)
- 使用 Windows CE .NET 测试工具包 (CETK) 构建和测试设备
- QT中 uic 工具的使用