`
diansummer
  • 浏览: 46117 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论

用scons构建cppcheck的GUI程序

阅读更多

关于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.zip

    用scons构建mdk工程,是非常完善的一个工程,构建后能成功编译,并且下载到板子上,能正常输出串口信息

    GNU Build Packages for SCons:使用SCons构建GNU工具-开源

    脚本包,允许您使用SCons构建工具来构建通常使用GNU Autotools的软件。

    软件构建工具scons3源码

    scons有非常多相对于make构建系统的优秀特性,可是因为发展时间比較短如今的应用范围还是不太多,可以找到的资料也不是非常多。 scons如今一大问题就是初始上手还是有点难度的,对于有python的基础的还是有点问题,...

    scons3.0.1 scons-design

    scons3.0.1 scons-design

    scons控制编译工程例子

    +scons_project_root 【src】 #源代码目录 [dir1] [dir2] [dir3] main.c 【target】 #目标输出目录 [include] [lib] [bin] 通过scons也实现这些功能。 至于scons的一些基本知识,请baidu查找,...

    scons-tools:一小部分定制的SCons构建器

    每个文件都位于一个独立的文件中,将其放入您的〜/ .scons / site_scons / site_tools目录中,或使用类似以下的代码: env = Environment(tools = ['default', 'archive'], toolpath = ['scons-tools']) 您应该将...

    scons3.0.1 scons-man

    scons-manscons-man

    rtthread scons添加源码和路径到mdk5工程

    我们做单片机时候,经常使用rtthread操作系统,这就免不了使用scons构建工具,当我们在application文件夹下添加我们自己写的文件时,在mdk工程下需要手动的添加源码和头文件,但是既然使用scons构建工具了,我们可以...

    SCons:软件构建工具-开源

    SCons是一种软件构建工具,它是... 它打算放到其他软件的软件包中并随其一起提供,以用于使用SCons进行构建,但不是必需的安装。 -scons-src软件包是完整的源代码树,包括用于打包SCons的所有内容以及所有回归测试。

    scons:SCons-一种软件构建工具

    SCons-一种软件构建工具 欢迎来到SCons开发树。 这棵树的真正目的是将SCons打包为各种格式的产品分发,而不仅仅是破解SCons代码。 如果您要做的就是安装和运行SCons,则比起使用Scons- {version} .tar.gz或scons- {...

    python和scons安装

    python和scons安装包及安装截图说明,适合windows 64位系统。没找到分值设置位置,建议版主设置分数为1分

    scons2ninja:为 SCons 生成 Ninja 构建文件

    关于 此脚本为项目生成构建文件。 用法 首先,您需要对您的项目的SConstruct文件进行一些小的更改。 此脚本假定SConstruct有一个...这将为具有给定标志的等效 SCons 构建生成build.ninja文件。 从那时起,您只需键入

    发掘Scons——替代Make的Python工具

    发掘Scons——替代Make的Python工具:Scons是用Python实现的一款跨平台的开源Build Tool,用Python实现意味着Scons比Make所使用的类Shell语言更贴近于自然语言,更易于理解和控制;用Python实现的另一个好处也是Make...

    scons-2.5.1.tar.gz

    scons

    Python2.6 scons1.3

    Python2.6 scons1.3

    scons-2.4.0.zip

    scons是一个Python写的自动化构建工具,同Linux的make工具功能相似。

    自动化编译工具scons简介

    自动化编译工具scons简介 自动化编译工具scons简介 自动化编译工具scons简介

    scons2-2-0

    scons-2.2.0.rar使用工具

    scons用户手册(英文)

    scons类似于makefile,只是scons是python编写的,并且搭建scons比搭建makefile简单,其中python语言也很容易学习,不过这个文档没有详细的一个大型项目的搭建用例,请注意是英文版

Global site tag (gtag.js) - Google Analytics