我不知道我做了什么,但似乎我打破了我的构建系统。
$ scons install
scons: Reading SConscript files ...
File "<string>", line 1
I_���.�K
H�4����Ǐ��U)�f���R�f���ў�U)�f���R�f���ў�
^
SyntaxError: invalid syntax
打算使用不可打印的字符。
糟糕的是:即使重置“已知工作”版本也无济于事,以及使用--debug=stacktrace
等选项。我的版本控制系统(mercurial)没有显示SCons
文件中的更改,我不知道如何继续。任何提示如何使mercurial打印出正在处理的文件的名称以找出发生了什么?
我的下一步是制作项目的新克隆(希望可以构建),但我很好奇这里有什么问题。
更新
当我更新到Ubuntu 12.04时问题消失了。 “消失”意味着在这种情况下,突然我能够执行scons --clean
命令,之后我能够再次重建我的项目。可悲的是,我无法重现错误,所以最后我不知道是什么导致它,因为它工作了几个月,我的同事之前都没有这么奇怪的错误。
这是我的剧本的摘录:
vars = Variables( "variables.cache" )
vars.Add( "CXX", "use this c++ compiler", "/usr/bin/g++" )
# (other stuff added to vars)
env = Environment( variables = vars ) # <-- this line caused the error
在解决这个问题的麻烦中,我得到的印象是,在更新之后,Python能够给我一个更好的错误消息,并且消息是(试图记住它)vars
在某种程度上无效。所以问题可能在variables.cache
,我不知道。也许我应该删除这个文件(我没有删除)以消除错误。
答案 0 :(得分:1)
尝试使用警告执行scons,如下所示:
# scons --warn=all
如果这没有帮助,您可以尝试更老式的方法,并在SConstruct中放置一些打印语句,以查看发生的问题以及问题发生的时间/地点。
您还可以尝试清除整个项目并删除/重命名根项目中的.sconsdb.lite。
更新:
我最近遇到了一个问题,因为Python的版本从2.6更改为2.7,错误处理完全改变了。因此,尝试在SConstruct中的所有(或至少是战略部分)周围放置一个python try / except块,并打印抛出的异常(如果有的话)。
如果这些都不起作用,请尝试在此处发布SConstruct。
我SConstruct
的代码示例演示了我如何使用Python try / except块找到错误。 BuildError异常给了我一个堆栈跟踪。还有更多例外情况可以“捕获”。
...
try:
SConscript(
os.path.join(moduleDir, 'SConscript'), # sub-directory SConscript to load
variant_dir = '#%s' % os.path.join(env['variantDir'], dir), # path relative to this script where to put built files
exports = ['env'], # which variables to export to sub-directory build
duplicate = 0) # dont duplicate source files in variant_dir
except SCons.Errors.BuildError as be:
print "*** BuildError exception processing module: %s, %s" % (moduleDir, be.__str__())
raise
except:
print "*** Unhandled exception processing module: %s" % moduleDir
raise