Windows下用Scons编译QT程序

2024-02-01 06:38

本文主要是介绍Windows下用Scons编译QT程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Windows下用Scons编译QT程序

By  华少贰逼的时候, 2012/01/05 23:39

关于什么是python、什么是scons、什么是qt……这些肤浅、粗俗的问题,请求助于搜索引擎。 
本文仅记录怎么在Windows系统上让这几位合作起来。

注意: 
1. 前提是系统已经安装有QT SDK,安装有VC(或者MingW或者Cygwin之类的编译环境)。 
2. 注意文中路径,网上很多不成功的情况都源自某个环节的路径出错。 
3. 文中所列均为跨平台工具,理论上在其它系统环境下也能完成,成与不成,看你的悟性,以及人品。

一、安装Python。 
目前scons只能工作在python2系列上。我们需要先安装python2,现在python2系列最新的版本是2.7.2。 
最好的方式是到python.org上去下载windows installer,相当简单,基本一路next就OK。 
假设我们安装在D:\SOFTWARE\Python2.7

二、安装scons。 
最好的方式是去www.scons.org下载scons的windows intaller。当前最新的版本是http://prdownloads.sourceforge.net/scons/scons-2.1.0.win32.exe。 
然后点击安装。基本上,你只需简单的一路next。 
scons的installer会自动检测已经安装的python,然后将自己的程序安装到python子目录下。 
安装好的路径应该是这样: 
D:\SOFTWARE\Python2.7\Lib\site-packages\scons-2.1.0

三、测试scons。 
随便找个目录,新建一个helloworld.c。

1 #include <stdio.h>
2 int main()
3 {
4     printf("Hello, world!\n");
5     return 0;
6 }

相同目录下再新建一个名为"Sconstruct"的文件,内容只有一行,注意大小写。: 
Program(‘hello.c’)

然后进入命令行模式,CD到Sconstruct所在的目录,执行scons命令。 
一般会有以下输出:

      C:\>scons 
      scons: Reading SConscript files … 
      scons: done reading SConscript files. 
      scons: Building targets … 
      cl /Fohello.obj /c helloworld.c /nologo 
      link /nologo /OUT:helloworld.exe helloworld.obj 
      embedManifestExeCheck(target, source, env) 
      scons: done building targets.

同时在当前目录下会生成一个hellow.exe,大功造成。

四、安装scons-qt。 
scons-qt是基于scons项目的扩展模块,可以让scons支持QT特有的编译工具,像moc,rcc,uic等。 
在scons的wiki页面上可以看到scons-qt的介绍。(http://www.scons.org/wiki/ToolsIndex) 
当前scons-qt的主页在 https://bitbucket.org/dirkbaechle/scons_qt4/downloads 。 
当前最新版的下载地址 https://bitbucket.org/dirkbaechle/scons_qt4/get/default.zip 。 
解压出来会看到两个目录,分别是使用手册和测试用例,先放一边。 
真正需要安装的其实只有一个文件,即__init__.py。 
D:\SOFTWARE\Python2.7\Lib\site-packages\scons-2.1.0\SCons\Tool目录下新建一个名为qt4的文件夹。 
然后把__init__.py拷贝到该目录中。就这么简单。

五、测试scons-qt。 
下面是一个简单的QT程序,helloqt.cpp。

01 #include <QtGui/QtGui>
02 #include <QtCore/QtCore>
03  
04 int main(int argc, char ** argv)
05 {
06     QApplication app(argc, argv);
07     QPushButton * button = new QPushButton("Hello QT!");
08     button->show();
09     QObject::connect(button, SIGNAL(clicked()), &app, SLOT(quit()));
10     app.exec();
11     return 0;
12 }

在相同目录下建立一个名为“SConstruct”的文件,内容如下: 
env=Environment() 
env['QT4DIR']="D:\\SOFTWARE\\QT4.7.3" #这里是QT的安装路径 
env.Tool("qt4") 
env.EnableQt4Modules(['QtGui','QtCore']) 
env.Program(‘helloqt’,'helloqt.cpp’) 
特别要注意前四行,经常会有人在这里遇到问题。 
然后进入命令行模式,进入SConstruct所在目录,执行scons。

D:\Workspace\QT\helloQT>scons 
scons: Reading SConscript files … 
scons: done reading SConscript files. 
scons: Building targets … 
cl /Fohelloqt.obj /c helloqt.cpp /TP /nologo /DQT_GUI_LIB /DQT_CORE_LIB /ID:\SOF
TWARE\QT4.7.3\include /ID:\SOFTWARE\QT4.7.3\include /ID:\SOFTWARE\QT4.7.3\includ 
e\QtGui /ID:\SOFTWARE\QT4.7.3\include\QtCore 
helloqt.cpp 
link /nologo /OUT:helloqt.exe /LIBPATH:D:\SOFTWARE\QT4.7.3\lib qtmain.lib QtGui4
.lib QtCore4.lib helloqt.obj 
scons: done building targets.

当前目录下生成了一个helloqt.exe的文件。 
双击看到“Hello QT!”,大功告成。

这篇关于Windows下用Scons编译QT程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/666380

相关文章

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Windows 上如果忘记了 MySQL 密码 重置密码的两种方法

《Windows上如果忘记了MySQL密码重置密码的两种方法》:本文主要介绍Windows上如果忘记了MySQL密码重置密码的两种方法,本文通过两种方法结合实例代码给大家介绍的非常详细,感... 目录方法 1:以跳过权限验证模式启动 mysql 并重置密码方法 2:使用 my.ini 文件的临时配置在 Wi

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要