这里没有软件测试的泛泛理论,只有博主的最佳实践。 博主的研究方向为静态分析和性能测试,致力于各种测试工具的引入、评估和开发。 本博的测试文章均为作者原创,转载请务必注明出处。

FreeScale Codewarrior 无法导出Makefile?怎么办?

上一篇 / 下一篇  2013-01-22 08:59:20 / 个人分类:Python


最近有一汽车客户试用Coverity,开发IDE为FreeScale CodeWarrior,目标平台为mppc,编译器为 mwcceppc,在Build过程中发现,Coverity无法监控到编译器活动,查看build-log,发现IDE根本没有调用编译器,或者调用了没有监控到。

联想到之前一个客户使用ARM的CodeWarrior,也有这个问题,但好在ARM提供了一个mcp2make(CodeWarrior的project文件扩展名为.mcp)的小工具,可以将工程文件直接转换成makefile。但FreeScale好像没有那么好心,各种baidu/360/google/。。。都没有找到答案,反而搜出一大堆类似的问题。

好吧,只能自己解决了,不过我可没想着搞出一个非常完善的makefile,那不是我的目的,我只想着解决我眼前的问题,也就是让coverity能顺利分析代码,仅此而已。

说干就干,Python是首选的工具,一个小时后,搞定!下面是Python脚本,在2.7版本调试通过。
import os
import glob

folderList = []
optionI = ''
optionO = ' '

def listyoudir(level,path):
    for i in os.listdir(path):
        print ' '*(level+1)+i
        if os.path.isdir(path+'\\'+i):
            listyoudir(level+1, path+'\\'+i)

def listFolderDir(path):
    for i in os.listdir(path):
        if os.path.isdir(path+'\\'+i):
            folderList.append(path+'\\'+i)
            listFolderDir(path+'\\'+i)

def incOption(folder):
    ptionI = ''
    for ds in folder:
        optionI += '-I\"' + ds + '\"' + ' '
    return optionI

def listSrcDir(path):
    os.chdir(path)
    return glob.glob('*.c') + glob.glob('*.cpp') + glob.glob('*.cxx')
    

rootpath = os.path.abspath('d:\\coverity\\codewarrior')
listFolderDir(rootpath)
optionI = incOption(folderList)

with open(rootpath+'\\options.ini') as f1:
    (tmp, compiler) = f1.readline().split(' = ')
    for line in f1:
        optionO += line.rstrip() + ' '

folderList.append(rootpath)
compiler = compiler.rstrip() + ' '
#print folderList
with open(rootpath+'\\make.bat', mode='w') as f2:
    src = ''
    for folder in folderList:
        f2.write('cd /d ' + folder + '\n')
        srcList = listSrcDir(folder)
        print srcList
        for src in srcList:
            f2.write(compiler + optionI + optionO + src + '\n')

生成的简易的批处理make.bat如下

cd /d d:\coverity\codewarrior\c
mwcceppc -I"d:\coverity\codewarrior\c" -I"d:\coverity\codewarrior\c1" -I"d:\coverity\codewarrior\c1\inc" -I"d:\coverity\codewarrior\c2" -I"d:\coverity\codewarrior\c2\in"  -I"C:\Program Files (x86)\Google\Google Pinyin 2" -DCPU=MPPC52XX --c99 --gnu --cxx=1 t.cpp
cd /d d:\coverity\codewarrior\c1
mwcceppc -I"d:\coverity\codewarrior\c" -I"d:\coverity\codewarrior\c1" -I"d:\coverity\codewarrior\c1\inc" -I"d:\coverity\codewarrior\c2" -I"d:\coverity\codewarrior\c2\in"  -I"C:\Program Files (x86)\Google\Google Pinyin 2" -DCPU=MPPC52XX --c99 --gnu --cxx=1 c1b.c
cd /d d:\coverity\codewarrior\c1\inc
mwcceppc -I"d:\coverity\codewarrior\c" -I"d:\coverity\codewarrior\c1" -I"d:\coverity\codewarrior\c1\inc" -I"d:\coverity\codewarrior\c2" -I"d:\coverity\codewarrior\c2\in"  -I"C:\Program Files (x86)\Google\Google Pinyin 2" -DCPU=MPPC52XX --c99 --gnu --cxx=1 a.c
cd /d d:\coverity\codewarrior\c2
mwcceppc -I"d:\coverity\codewarrior\c" -I"d:\coverity\codewarrior\c1" -I"d:\coverity\codewarrior\c1\inc" -I"d:\coverity\codewarrior\c2" -I"d:\coverity\codewarrior\c2\in"  -I"C:\Program Files (x86)\Google\Google Pinyin 2" -DCPU=MPPC52XX --c99 --gnu --cxx=1 c2a.c
cd /d d:\coverity\codewarrior\c2\in
mwcceppc -I"d:\coverity\codewarrior\c" -I"d:\coverity\codewarrior\c1" -I"d:\coverity\codewarrior\c1\inc" -I"d:\coverity\codewarrior\c2" -I"d:\coverity\codewarrior\c2\in"  -I"C:\Program Files (x86)\Google\Google Pinyin 2" -DCPU=MPPC52XX --c99 --gnu --cxx=1 ab.cxx
cd /d d:\coverity\codewarrior
mwcceppc -I"d:\coverity\codewarrior\c" -I"d:\coverity\codewarrior\c1" -I"d:\coverity\codewarrior\c1\inc" -I"d:\coverity\codewarrior\c2" -I"d:\coverity\codewarrior\c2\in"  -I"C:\Program Files (x86)\Google\Google Pinyin 2" -DCPU=MPPC52XX --c99 --gnu --cxx=1 missing_indent_source.c
mwcceppc -I"d:\coverity\codewarrior\c" -I"d:\coverity\codewarrior\c1" -I"d:\coverity\codewarrior\c1\inc" -I"d:\coverity\codewarrior\c2" -I"d:\coverity\codewarrior\c2\in"  -I"C:\Program Files (x86)\Google\Google Pinyin 2" -DCPU=MPPC52XX --c99 --gnu --cxx=1 too_many_characters.c

好吧,我的问题解决了,Coverity可以顺利分析代码了。

结束。

对了,补充一句,如果你想编一个完善的可以直接生成目标文件的make,可以参考 http://wenku.baidu.com/view/c85edffefab069dc50220131.html


TAG:

 

评分:0

我来说两句

Open Toolbar