1

何をしたのか正確にはわかりませんが、ビルドシステムを壊したようです。

$ 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、私にはわかりません。エラーを取り除くために、このファイルを削除する必要があったかもしれません (削除しませんでした)。

4

1 に答える 1

1

次のように、警告付きで scons を実行してみてください。

# scons --warn=all

これが役に立たない場合は、より古い学校のアプローチを試して、SConstruct にいくつかの印刷ステートメントを入れて、何が起こっているか、いつ/どこで問題が発生したかを確認できます。

プロジェクト全体をクリーンアップして、ルート プロジェクトの .sconsdb.lite を削除/名前変更することもできます。

アップデート:

最近、Python のバージョンが 2.6 から 2.7 に変更され、エラー処理が完全に変更されたため、問題が発生しました。したがって、Python の try/except ブロックを SConstruct のすべて (または少なくとも戦略的な部分) に配置して、スローされた例外 (存在する場合) を出力してみてください。

これらのいずれも機能しない場合は、SConstruct をここに投稿してみてください。

SConstructPython の 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
于 2012-05-21T16:15:19.607 に答える