关于linux上下载cppcheck及配置Qt环境等信息,可
参见我的上一篇文章 《64位centos上用Qt编译生成c/c++代码检查工具cppchek的GUI》
假定cppcheck下载后,存放在本地的路径为:/usr/tools/cppcheck-1.44
scons构建脚本文件目录结构如图所示
cppcheck-1.44 sconstruct文件
|
|---cli sconscript文件
|
|---gui sconscript文件
|
|---test sconscript文件
|
|---....
1、sconstruct文件,内容如下:
#!/usr/bin/python
import os
bin = '#bin'
myhome = os.getcwd()
env = Environment(
tools=['default','qt'],
ENV = os.environ,
CXXFLAGS = '-O2 -DNDEBUG -Wall -Ilib',
BINDIR = bin,
LIBS=[],
#QTDIR='/opt/qtsdk/qt'
)
Export('env','myhome')
subdir = ['./test','./cli','./gui']
for i in subdir:
env.SConscript('%s/sconscript' %(i) )
2、cli/sconscript文件,内容如下:
#!/usr/bin/python
import os
Import('env','myhome')
lib_files = Glob('%s/lib/*.cpp' %(myhome))
cli_files = Glob('%s/cli/*.cpp' %(myhome))
bin_cppcheck = env.Program(target='cppcheck',
source=[cli_files,lib_files],
CPPPATH= '%s/lib' %(myhome) )
cppcheck_install = env.Install('$BINDIR', bin_cppcheck)
env.Default(cppcheck_install);
3、gui/sconscript文件,内容如下:
#!/usr/bin/python
import os
import glob
Import('env','myhome')
def recursiveDirs(root) :
return filter( (lambda a : a.rfind( "SVN")==-1 ), [ a[0] for a in os.walk(root)] )
def unique(list) :
return dict.fromkeys(list).keys()
def scanFiles(dir, accept=["*.cpp"], reject=[]) :
sources = []
paths = recursiveDirs(dir)
for path in paths :
for pattern in accept :
sources+=glob.glob(path+"/"+pattern)
for pattern in reject :
sources = filter( (lambda a : a.rfind(pattern)==-1 ), sources )
return unique(sources)
lib_files = Glob('%s/lib/*.cpp' %(myhome))
temp_files = Glob('temp/*.cpp')
gui_files = Glob('*.cpp')
cpp_path = ['/opt/qtsdk/qt/mkspecs/linux-g++-64',
'/opt/qtsdk/qt/include',
'/opt/qtsdk/qt/include/QtCore',
'/opt/qtsdk/qt/include/QtGui',
'/opt/qtsdk/qt/include/QtXml',
'%s/gui/temp' %(myhome),'%s/gui' %(myhome)
]
lib_path = ['/opt/qtsdk/qt/lib','/usr/lib','/usr/X11R6/lib64']
ui_dir=['resultsview','application','main','settings','file','about']
for ui in ui_dir:
env.Execute("/opt/qtsdk/qt/bin/uic -o %s/gui/temp/ui_%s.h %s/gui/%s.ui" %(myhome,ui,myhome,ui))
# env.Uic(target="%s/gui/temp/ui_%s" %(myhome,ui),source=ui) 注:执行Uic接口有点问题
#for qrc in scanFiles('/usr/tools/cppcheck-1.44/gui', ['*.qrc']):
#print "hua:"+qrc
#env.Qrc(qrc, QT4_QRCFLAGS='-name '+'gui gui.qrc')
env.Execute('/opt/qtsdk/qt/bin/rcc -name gui gui.qrc -o temp/qrc_gui.cpp')
bin_gui = env.Program(target='gui',
source=[lib_files,gui_files,temp_files],
CPPPATH = cpp_path,
LIBPATH = lib_path,
LIBS=['QtGui','QtCore','QtXml','pthread']
)
gui_install = env.Install('$BINDIR', bin_gui)
env.Default(gui_install);
4、test/sconscript文件,内容如下:
#!/usr/bin/python
import os
Import('env','myhome')
lib_files = Glob('%s/lib/*.cpp' %(myhome))
cli_files = '%s/cli/threadexecutor.cpp' %(myhome)
test_files = Glob('*.cpp')+Glob('tinyxml/*.cpp')
bin_testrunner = env.Program(target='testrunner',
source=[test_files,lib_files,cli_files],
CPPPATH = ['%s/cli' %(myhome)])
test_install = env.Install('$BINDIR', bin_testrunner)
env.Default(test_install);
5、执行构建脚本
$cd /usr/tools/cppcheck-1.44
$scons即可
6、解决gui可执行程序运行不成功
在编译成功gui,生成可执行文件后,运行该可执行文件,系统提示错误信息:“error while loading shared libraries: libQtGui.so.4: cannot open shared object file: No such file or directory”
解决办法:
(1)查找libQtGui.so.4所在目录
$find /opt/qtsdk |grep libQtGui.so.4
/opt/qtsdk/qt/lib/libQtGui.so.4
/opt/qtsdk/qt/lib/libQtGui.so.4.6.3
/opt/qtsdk/qt/lib/libQtGui.so.4.6
/opt/qtsdk/lib/libQtGui.so.4
/opt/qtsdk/lib/libQtGui.so.4.7.0
(2)ld文件配置
$vi /etc/ld.so.conf
include id.so.conf.d/*.conf //里面只有一行,表示到id.so.conf.d目录中寻找配置信息
$cd /etc/ld.so.conf.d //转到Id.so.conf.d目录下
在该目录下会看到qt-i386.conf
修改Id路径
$vi qt-i386.conf //编辑qt-i386.conf文件
#/usr/lib/qt-3.3/lib //屏蔽默认指向qt-3.3的语句
/opt/qtsdk/qt/lib //增加指向qt4.6.3所在的目录
(3)设置完ld路径后,需要运行ldconfig命令,更新缓存
做完上述后,即可运行成功gui程序
分享到:
相关推荐
《使用SCons构建MDK工程:从源码到串口通信》 在嵌入式开发领域,Keil uVision(MDK)是一款广泛使用的集成开发环境,尤其在C语言编程中,它以其强大的调试功能和良好的用户体验而备受青睐。然而,当项目变得复杂时...
SCons的主要特点是使用Python脚本进行构建,并且可以跨平台使用。本指南将详细介绍SCons的使用方法和配置。 一、安装SCons 在使用SCons之前,需要先安装Python和SCons。Python是SCons的核心语言,SCons是基于...
SCons是一个用Python编写的高级构建工具,它提供了一种更现代、更一致的方法来管理软件项目的构建过程。下面将详细介绍这个项目以及其背后的原理和优势。 1. **SCons构建系统** SCons是一个跨平台的构建工具,它...
### SCons 3.0.1 - SCons-Man:构建工具高级使用指南 #### SCons-Man 概述 SCons-Man 是针对 SCons 构建系统的一个深入的技术文档集,旨在帮助开发者更好地理解和掌握 SCons 的高级用法及功能特性。SCons 本身是一...
SCons是一种开源的构建系统,它使用Python脚本语言编写,与传统的Makefile工具类似。SCons旨在解决Makefile中一些常见的问题,例如难以编写和维护的脚本、不同的编译器和工具链配置以及对脚本的执行环境的依赖。...
SCons是一个开源的构建工具,它用Python语言编写,用于自动化软件构建过程,替代了传统的Make工具。 1. **SCons基本概念**: - SCons是"Software Construction Tool"的缩写,它是一个构建系统,负责编译、链接等...
SCons的显著特点在于其配置文件是用Python编程语言编写的,这与许多其他构建工具使用专有配置语言的方式不同。尽管SCons的学习曲线可能较陡,因为它需要了解如何调用特定的函数来设置构建过程,但对Python基础熟悉的...
SCons使用Python语言编写,它具有极高的灵活性和可配置性,并且能够支持多种编程语言构建。 首先,SCons用户手册开篇介绍了SCons的基本原则,这包括了SCons的构建哲学、工具的完整性和作者、贡献者以及版权信息。...
SCons的构建过程是基于Python脚本的,也就是说,SCons的构建脚本实际上是一个Python程序,这就意味着用户可以利用Python强大的功能来编写构建脚本,包括条件语句、循环和函数等,而不需要学习和使用特定于SCons的...
此外,cpp-check还支持集成到各种IDE(如Eclipse、Visual Studio)或构建系统(如CMake、SCons),使得代码检查成为开发流程的一部分。 cpp-check的主要功能包括: 1. **类型检查**:检测可能的类型转换错误,例如...
SCons使用Python语言编写脚本来定义构建规则,这种方式使得构建过程中的依赖关系和构建规则更加易于编写和维护。SCons的构建脚本通常被称为SConstruct文件,它使用Python语法来定义构建目标和规则。 在了解SCons...
SCons的使用非常灵活,它可以读取名为`SConstruct`的配置文件,这个文件用Python编写,定义了构建规则和目标。SCons自动处理依赖关系,确保构建过程的正确顺序。例如,你可以在`SConstruct`文件中指定编译C++代码、...
在 SCons 中,用户可以使用 Python 语言来编写构建脚本,定义项目的构建规则和依赖关系,从而实现自动构建和维护项目。 SCons 的主要优点是: * 可以跨平台使用,支持 Windows、Linux 和 MacOS 等多种操作系统。 *...
SCons是一个开源的构建工具,主要用Python语言编写,它为软件构建过程提供了一种高效、可扩展且跨平台的解决方案。"scons-3.0.5.zip" 是这个工具的一个版本,适用于Windows操作系统。在本文中,我们将深入探讨SCons...
scons有非常多相对于make构建系统的优秀特性,可是因为发展时间比較短如今的应用范围还是不太多,可以找到的资料也不是非常多。 scons如今一大问题就是初始上手还是有点难度的,对于有python的基础的还是有点问题,...
SCons的核心理念是用Python语言编写构建脚本,这使得它具有高度的灵活性和可扩展性。 在深入讲解SCons之前,我们先来看一下标题中的"scons-2.5.1.tar.gz"。这是一个标准的Linux/Unix软件分发包格式,表明我们正在...
与makefile不同,SCons使用Python语言编写构建脚本,这使得脚本编写更为直观和灵活,同时具备了Python的全部功能,使其成为autoconfig和makefile的有效替代。 在构建和安装SCons的过程中,首先需要确保安装了Python...
使用SCons1.3时,开发者需要创建一个名为`SConstruct`的主构建文件,这个文件用Python代码定义了如何构建项目。文件列表、编译选项、依赖关系等都可以在这个文件中配置。此外,SCons还支持`SConscript`子文件,用于...
- SCons 是一种构建工具,类似于传统的 Makefile 工具,但使用 Python 编写,使得配置更加灵活和易于维护。 - SCons 的核心优势在于其简洁性和可扩展性,通过 Python 的强大功能可以实现更为复杂的构建逻辑。 - *...
在RTThread这样的实时操作系统中,`scons`的使用可以帮助简化嵌入式软件的编译流程,确保代码能够在不同的硬件平台上正确构建和运行。通过集成Python绑定,开发者还可以利用Python的灵活性进行高级的构建逻辑控制,...