【发布时间】:2011-07-20 09:23:41
【问题描述】:
我有这个使用 Makefile 编译的 C++ 项目,有时当(我的猜测)缺少一些包含时,我收到一条神秘的“错误 2”消息,并且 make 过程停止。 我怀疑缺少包含,因为这是当我包含一个不存在的头文件时发生的第三次。
看起来像这样:
---- 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
虽然这是记录在案的东西,但我怀疑我的问题与包含此依赖项有关。
如果您已经偶然发现了这个问题,请随时对此发表评论......
提前致谢。
编辑:
好的,在玩了一会儿之后,在 -include $(DEPENDS) 前面抑制 - 会给我一些更多信息(makefile 确实 停止在丢失的包含文件上)。
make[1]: *** No rule to make target « foo.h », necessary for « tmp/bar.d ». Stop.
现在的缺点是,当我第一次启动make 时,我会为每个应该包含的依赖文件收到missing bar.d file 消息(这就是我们将- 放在首位的原因)。
有什么解决办法吗?
【问题讨论】:
-
我认为我们需要查看更多的 makefile,例如您如何调用 gcc- 我倾向于显示出于这种原因编译的命令
-
如果你设置了一个变量,一些 makefile 会关闭花哨的输出。例如,
automake会在您运行make V=1时显示命令,也可以尝试make VERBOSE=1,或检查Makefile以获得更好的想法。
标签: c++ gcc dependencies makefile