我正在为旨在跨平台的 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)
在 Debug模式下,解决方案文件应该包含调试信息。但是,当我在 Debug模式下调试代码时,会收到“找不到调试信息或调试信息不匹配”的警告。不知道为什么。生成一个“.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
关于c++ - 如何使用 scons 生成带有调试信息的 MSVC 解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23390936/