2

scons を使用して、vc10 および renesas コンパイラでコンパイルしています。

デバッグ モードで実行可能ファイルを取得するコマンドはありますか?

sconsコマンド「 and enter」でプロジェクトを実行すると、リリースモードになります。

Visual Studio デバッガーを使用してその .exe ファイルをデバッグできません。

デバッグモードでデバッグ実行可能ファイルを取得する方法を教えてもらえますか? scons に設定するコマンドやフラグはありますか?

4

1 に答える 1

5

実行可能ファイルをデバッグ モードで取得するには、次のように、適切なコンパイラ デバッグ フラグを CXXFLAGS 構築変数に追加するだけです。

env = Environment()
env.Append(CXXFLAGS = ['/DEBUG'])

しかし、これはかなり基本的なものであり、実行可能ファイルがデバッグ モードでコンパイルされるタイミングをコマンド ラインから制御できるようにしたいと思うでしょう。これは、コマンド ライン ターゲットまたはコマンド ライン オプション (debug=1 など) で実行できます。

ターゲットを使用するには、次のようにします。

envRelease = Environment()
envDebug = Environment()
envDebug.Append(CXXFLAGS = ['/DEBUG'])

targetRelease = envRelease.Program(target = 'helloWorld', source = 'helloWorld.cc')
# This makes the release target the default
envRelease.Default(targetRelease)

targetDebug = envDebug.Program(target = 'helloWorldDebug', source = 'helloWorld.cc')
envDebug.Alias('debug', targetDebug)

コマンド ライン ターゲットを指定せずに SCons を実行すると、envRelease.Default()関数で指定されたとおりにリリース バージョンがビルドされます。次のように、デバッグ ターゲットを指定して SCons を実行するとscons debug、関数で指定されたとおりにデバッグ バージョンがビルドされますenvDebug.Alias()

これを行う別の方法は、次のようにコマンドライン引数を使用することです:scons debug=0またはscons debug=1、ビルドスクリプトでいくつかのロジックを実行できるようにするため、次のようにバリアントディレクトリなどをより簡単に制御できます。

env = Environment()

# You can use the ARGUMENTS SCons map
debug = ARGUMENTS.get('debug', 0)
if int(debug):
   env.Append(CXXFLAGS = ['/DEBUG'])
   env.VariantDir(...)
else:
   env.VariantDir(...)

env.Program(target = 'helloWorld', source = 'helloWorld.cc')

その他のコマンド ライン処理オプションについては、こちらを参照してください。

そして、私が好む最後のオプションは、常に両方のバージョンをそれぞれの variantDir (たとえば、build/vc10/release と build/vc10/debug) でビルドすることです。

envRelease = Environment()
envDebug = Environment()
envDebug.Append(CXXFLAGS = ['/DEBUG'])

envRelease.VariantDir(...)
targetRelease = envRelease.Program(target = 'helloWorld', source = 'helloWorld.cc')
# This makes the release target the default
envRelease.Default(targetRelease)
# This allows you to only build the release version: scons release
envRelease.Alias('release')

envDebug.VariantDir(...)
targetDebug = envDebug.Program(target = 'helloWorld', source = 'helloWorld.cc')
# This makes the debug target get built by default in addition to the release target
envDebug.Default(targetDebug)
# This allows you to only build the debug version: scons debug
envDebug.Alias('debug')
于 2013-03-28T14:17:46.787 に答える