1. ホーム
  2. c++

[解決済み] Make / gcc cryptic error 2: How to have more information?

2022-02-10 17:22:46

質問内容

このC++プロジェクトはMakefileを使ってコンパイルしているのですが、時々、( 推測 というメッセージが表示され、makeが停止してしまいます。
存在しないヘッダーファイルをインクルードしたときに起こるのは3回目なので、インクルードファイルの欠落を疑っています。

このような感じです。

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

なぜなら、冗長コマンド(g++の各呼び出しが表示される)を使用しても、何も表示されないからです。
私は、こいつが"のような誤ったメッセージを吐くと予想していた。 can't find header 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 メッセージは、インクルードすべき各依存性ファイルに対して表示されます。 - を使用します。) 何か解決策はありますか?

どのように解決するのですか?

OK 私の編集で問題が解決しました:ダッシュの配置 - の前にある include は、依存関係の生成から来るエラーメッセージを隠します。

後日のためのメモ:Makeを出し抜こうとしないこと。