如何使用scons生成带有调试信息的MSVC解决方案

How to generate MSVC solution with debugging information using scons?

本文关键字:信息 调试 MSVC 解决方案 何使用 scons      更新时间:2023-10-16

我正在为一个旨在跨平台的c++项目编写scons脚本。在windows中,脚本生成msvc解决方案。脚本片段如下:

ENV={'PATH':os.environ['PATH']}
if build_type=='Release':
    CCFLAGS=['/Ox','/EHsc','/DNDEBUG','/W3']
else:
    CCFLAGS=['/Zi','/EHsc','/W3']
ENV['TMP']=os.environ['TMP']
if os_architecture=='32bit':
    arc='x86'
else:
    arc='amd64'
env=Environment(CCFLAGS=CCFLAGS,CPPPATH=include_path,LIBPATH=lib_path,RPATH=lib_path,LIBS=libs,ENV=ENV,MSVS_ARCH=arc,TARGET_ARCH=arc)

在调试模式下,解决方案文件应该包含调试信息。但是,当我在调试模式下调试代码时,我会收到"找不到调试信息或调试信息不匹配"的警告。不知道为什么。生成了一个".pdb"文件。

Zi参数将告诉VS在编译时阶段创建一个pdb,但是,您仍然需要指定链接时pdb的生成(是的,这是非常冗余的,但超细粒度控制可能有一些原因(。如果你看到的PDB名为vc###.PDB(其中###是你的vc编译器版本(,那么这是你的obj文件的编译时PDB,而不是你实际dll的可调试链接时PDB。

总之,我在scons中添加了以下行,现在我有了一个可调试的程序。pdb:

# Produce one .PDB file per .OBJ when compiling, then merge them when linking.
# Doing this enables parallel builds to work properly (the -j parameter).
# See: http://www.scons.org/doc/HTML/scons-man.html section CCPDBFLAGS
# 
env['CCPDBFLAGS'] = '/Zi /Fd${TARGET}.pdb'

我从以下非常有用的示例SConscript中得到的http://www.scons.org/wiki/MsvcIncrementalLinking