2011-03-22 76 views
2

我有这个使用Makefile编译的C++项目,有时候(我的猜测)有一些缺失包含,我得到一个神秘的“错误2”消息,并停止make过程。
我怀疑失踪包括,因为这是它包含一个不存在的头文件时发生的第三次。Make/gcc神秘错误2:如何获得更多信息?

它看起来像这样:

---- Build tmp/foo.o ---- 
---- Build tmp/bar.o ---- 
---- Build tmp/toto.o ---- 
---- Build tmp/tata.o ---- 
make: *** [build_Project] Error 2 

这是推动我坚果,因为即使是使用详细的命令(其中每个G ++调用时显示),我什么都看不到。
我希望这家伙呕吐一些错误的消息,如“找不到标题X”或“未定义的参考Y”,但没有什么。

我的gcc编译选项是-O0 -Wall -Werror -Wno-write-strings -fno-rtti -fno-exceptions,如果有帮助。

啊,而且我们使用包括依赖的Makefile中招:

ifneq ($(strip $(DEPENDS)),) 
ifneq ($(MAKECMDGOALS),clean) 
-include $(DEPENDS) 
endif 
endif 

(见herehere获取更多信息)

虽然这是记载的东西,我怀疑我的问题有事情做与这种依赖包容。

如果你已经无意中发现了这个问题,随时对此置评...

在此先感谢。

编辑: 好,后一点的播放,在-include $(DEPENDS)前抑制-给了我一些更多的信息(生成文件站上缺少包括文件)。

make[1]: *** No rule to make target « foo.h », necessary for « tmp/bar.d ». Stop. 

现在的缺点是,当我启动make的第一次,我得到应包含每个依赖文件missing bar.d file消息(这就是为什么我们在第一时间把-)。 任何解决方案?

+1

我认为我们需要看到更多的makefile例如你如何调用gcc-并且我倾向于显示命令编译出于这种原因 – Mark 2011-03-22 11:01:42

+1

如果你设置了一个变量,一些makefile会关掉花哨的输出。例如'automake',如果你运行'make V = 1',还会尝试'make VERBOSE = 1',或者检查'Makefile'以获得更好的想法。 – 2011-03-22 11:57:37

回答

2

好吧,我的编辑解决了这个问题:在include之前放置一个破折号-隐藏来自依赖生成的错误消息。

以后注意:不要试图智胜Make。

1

这是一个定制的Makefile,可能通过类似CMake的一些工具,躲在类似这样的编译器输出:

gcc -o a.out a.c 2>&1 > /dev/null 

如果你不知道发生了什么这听起来像一个好主意,重温完全构建系统,尝试重新开始。

+0

不,我确实写了makefile,但可能传递了一些棘手的副作用。编译行不包含这样的'2>&1>/dev/null',所以不能这样。 – Gui13 2011-03-22 12:50:43