0

残念ながら、これが最初にいつ発生したかは覚えていませんが、最近、「make」を実行してプログラムをビルドすると、奇妙なバグに気付きました。

次のメイクファイルがあります。

SOURCE = Foo.cpp \
         Foobar.cpp

OBJECTS = $(SOURCE:.cpp=.o)
LIBS = -lX11 -lGL -lGLU

program: $(OBJECTS)
    g++ $(OBJECTS) $(LIBS) -o platform

.o: .cpp
    g++ -g -c $@

厄介なことに、make を実行すると、次のようになります。

$ make
g++    -c -o Foo.o Foo.cpp
g++    -c -o Foobar.o Foobar.cpp
g++ Foo.o Foobar.o -lX11 -lGL -lGLU -o program

「-g」オプションは無視されます。なぜこれが起こっているのか誰にも分かりますか?興味深いことに、ターミナルでコマンドを手動で入力してみました。

$ g++ -g -c Foo.cpp
$ g++ -g -c Foobar.cpp
$ make
g++ Foo.o Foobar.o -lX11 -lGL -lGLU -o program

そして、それは意図したとおりに機能し、gdb のようなプログラムを正しく使用できるので、C++/gcc の問題ではないようです。私はメイクファイルの経験が豊富ではありませんが、読んだ例やチュートリアルはどれも持っていないようですオプションが消えるという問題はなく、それに関する投稿はないようです。私は愚かなことをしただけで、それに気づいていませんか?

4

1 に答える 1

0

オブジェクト ファイルを構築するルールが間違っています。次のものがありません%

%.o: %.cpp
    g++ -g -c $<
于 2013-04-12T17:04:23.947 に答える