我找到了一个关于这个这里的旧邮件列表线程,但是,在文档中没有任何进一步的信息或任何内容。
克郎支持那个旗帜吗?我在一个示例中尝试了-g1、-g2、-g3和-g,但是结果总是一样的,所以看起来并非如此。
计划好了吗?
发布于 2014-04-09 16:00:19
目前clang没有,但它没有很好的文档。虽然它接受您提到的选项,但它把它们都当作是-g。从clang源代码中,llvm/tools/clang/lib/Driver/Tools.cpp获得了以下代码(大约位于rev 205900的第2825行):
// Use the last option from "-g" group. "-gline-tables-only" and "-gdwarf-x"
// are preserved, all other debug options are substituted with "-g".
Args.ClaimAllArgs(options::OPT_g_Group);
if (Arg *A = Args.getLastArg(options::OPT_g_Group)) {
if (A->getOption().matches(options::OPT_gline_tables_only)) {
// FIXME: we should support specifying dwarf version with
// -gline-tables-only.
CmdArgs.push_back("-gline-tables-only");
// Default is dwarf-2 for darwin.
if (getToolChain().getTriple().isOSDarwin())
CmdArgs.push_back("-gdwarf-2");
} else if (A->getOption().matches(options::OPT_gdwarf_2))
CmdArgs.push_back("-gdwarf-2");
else if (A->getOption().matches(options::OPT_gdwarf_3))
CmdArgs.push_back("-gdwarf-3");
else if (A->getOption().matches(options::OPT_gdwarf_4))
CmdArgs.push_back("-gdwarf-4");
else if (!A->getOption().matches(options::OPT_g0) &&
!A->getOption().matches(options::OPT_ggdb0)) {
// Default is dwarf-2 for darwin.
if (getToolChain().getTriple().isOSDarwin())
CmdArgs.push_back("-gdwarf-2");
else
CmdArgs.push_back("-g");
}
}从最后几行可以看到,任何尚未被删除的-g选项(例如-g7)都会在这个例程Clang::ConstructJob()中转换为一个普通的-g。
我不知道有什么计划改变这一点,但我也不是一个clang开发人员。你可能想在邮件列表上问一问。
有关文档中的开关,请参阅在线手册,而Tools.cpp的源代码则详细查看选项处理的其余部分。
https://stackoverflow.com/questions/22965919
复制相似问题