2010-07-14 73 views
3

让我用这个评论来说吧,我对Makefiles或make了解甚少。调试Makefile

有一个非常大的项目,每晚自动生成。它以Debug和Release两种模式构建,调试用于Valgrind等实用程序提供代码分析。不知何故,某些构建的库在make过程中会丢失调试标志,这使得某些分析输出无益。我负责发现错误,我需要一些关于如何查找/修复问题的建议。

在此先感谢

+0

你能发布代码吗?或者至少行〜1到25?标志/选项通常设置在开始处。 – 2010-07-14 23:11:11

+0

有> 100个Makefiles,由顶层Makefile(内容非常少)以及相互之间产生。我无法完整地发布其中的任何一个(封闭源代码),如果我知道要发布哪个部分有帮助,我可能已经得到了答案。 – user108088 2010-07-14 23:18:56

回答

4

鉴于稀疏的信息,我可以根据我在Makefile中使用方面已经看到了大项目屈指可数只绘制一个非常普遍的策略。

如果您还不知道标志的起源位置,请搜索Makefiles进行查找。

喜欢的东西:

find . -name Makefile -exec grep -nH -- -g {} \; 

(调整-name模式,如果你的项目使用包含的Makefile像foo.mk或bar.mak或东西,调整“-g”如果你的调试标志的东西其他)。

您可能会发现它分配给像CFLAGS这样的变量。查看分配此变量的位置,它可能是有条件地设置的(例如ifeq($(RELEASE),1))。

现在看一下库中没有得到这些标志的Makefile。找到编译命令所在的位置。它使用正确的变量吗?这些Makefiles是否覆盖变量?

将构建的输出捕获到文件并搜索可能没有设置调试标志的任何其他位置也可能会有帮助。

5

本身也支持调试标志-d;取决于你的Makefile如何互相调用,可能会传递它(如果不是,你可以用脚本重写它们);那么如果你将结果输出提供给一个文件,你可以开始寻找线索。

+1

根据我的经验,'make -d'太吵了,没用。 – bstpierre 2010-07-15 16:55:07

+0

我假设你会使用grep或类似来增加信号/噪音。 – reinierpost 2010-07-15 22:50:08