调试一个 Makefile

3
让我先说一下,我很少了解Makefiles或make。
有一个非常大的项目每晚都会自动构建。它以Debug和Release模式构建,Debug用于类似Valgrind的实用程序以提供代码分析。不知何故,在制作过程中,某些构建的库失去了调试标志,这使得某些分析输出无用。我的任务是找到错误,并需要一些关于如何定位/修复问题的建议。
提前致谢。

你能发布代码吗?或者至少1到25行?标志/选项通常在开头设置。 - William Briand
有100多个Makefile,由一个顶层Makefile(内容非常少)和彼此之间生成。我无法发布它们的全部内容(闭源),如果我知道哪一部分可以帮助解决问题,我可能已经得到答案了。 - user108088
3个回答

5

Make本身也支持一个调试标志,-d; 根据你的Makefile之间如何调用,可能可以通过传递它来实现(如果不行,您可以使用脚本重写它们); 然后,如果将生成的输出保存到文件中,就可以开始寻找线索。


2
根据我的经验,make -d 太吵了,没有什么用处。 - bstpierre
我假设你会使用grep或类似工具来提高信噪比。 - reinierpost

4

鉴于信息不充分,我只能根据我在一些大型项目中看到的Makefile用法勾画一个非常普遍的策略。

如果您不知道标志(flags)的来源,请搜索Makefiles以找出。

类似于:

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

如果您的项目使用包含的Makefiles,如foo.mk或bar.mak等,则需要调整名称模式。如果您的调试标志是其他内容,请调整“-g”。

您可能会发现它被分配给类似CFLAGS的变量。在分配该变量的位置附近查找,它可能是有条件设置的(例如ifeq($(RELEASE),1))。

现在查看未获得这些标志的库中的Makefile。找到编译命令所处的位置。它是否使用正确的变量?这些Makefiles是否覆盖了该变量?

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


0

使用remake,它非常好用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接