如何使用scons在调试模式下获取可执行文件

时间:2013-03-28 12:34:16

标签: scons

我正在使用scons使用vc10和renesas编译器进行编译。

是否有任何命令可以在调试模式下获取可执行文件?

如果我使用命令“scons执行我的项目并输入”它将进入释放模式。

我无法使用visual studio调试器调试该.exe文件。

有人能告诉我如何在调试模式下获取调试可执行文件吗? 在scons中是否有要设置的命令或标志?

1 个答案:

答案 0 :(得分: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=0scons debug=1,这将允许您在构建脚本中执行某些逻辑,从而使您可以更轻松地控制variant-dir等如下:

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')

查看here以获取更多命令行处理选项。

最后一个选项,我更喜欢只是总是构建两个版本,每个版本都在各自的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')