我正在使用scons使用vc10和renesas编译器进行编译。
是否有任何命令可以在调试模式下获取可执行文件?
如果我使用命令“scons
执行我的项目并输入”它将进入释放模式。
我无法使用visual studio调试器调试该.exe文件。
有人能告诉我如何在调试模式下获取调试可执行文件吗? 在scons中是否有要设置的命令或标志?
答案 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=0
或scons 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')