我正在使用 scons 与 vc10 和 Renesas 编译器进行编译。
是否有任何命令可以在调试模式下获取可执行文件?
如果我使用命令“并输入”执行我的项目,scons
它将进入发布模式。
我无法使用 Visual Studio 调试器调试该 .exe 文件。
谁能告诉我如何在调试模式下获得调试可执行文件?scons 中是否有要设置的命令或标志?
我正在使用 scons 与 vc10 和 Renesas 编译器进行编译。
是否有任何命令可以在调试模式下获取可执行文件?
如果我使用命令“并输入”执行我的项目,scons
它将进入发布模式。
我无法使用 Visual Studio 调试器调试该 .exe 文件。
谁能告诉我如何在调试模式下获得调试可执行文件?scons 中是否有要设置的命令或标志?
要在调试模式下获得可执行文件,只需将适当的编译器调试标志添加到 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
or 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')