2017-06-14 3 views
0

私はmakeの問題に遭遇しました。私は3つのファイルを持っています。Makefileをリンクする

main.cpp | src/Math/Vector2.cpp |

main: vector2.o main.o 
    g++ -o main.o vector2.o 

main.o: main.cpp 
    g++ -o main.o main.cpp -c 

vector2.o: src/Math/Vector2.cpp src/Math/Vector2.hpp 
    g++ -o vector2.o src/Math/Vector2.cpp -lm -c 

私は手動でこれらのコマンドをコピーすると、それは完全に罰金コンパイル:SRC /数学/ Vector2.hppは

は、ここに私のメイクファイルです。 しかし$メイン戻り

g++  main.cpp -o main 
/tmp/ccnRZ4UD.o: In function `main': 
main.cpp:(.text+0x42): undefined reference to ` 
phy2d::Maths::Vector2f::Vector2f(double, double)' 
main.cpp:(.text+0x66): undefined reference to ` 
phy2d::Maths::Vector2f::Vector2f(double, double)' 
main.cpp:(.text+0x79): undefined reference to ` 
phy2d::Maths::Vector2f::distance(phy2d::Maths::Vector2f const&) 
const' 
collect2: error: ld returned 1 exit status 
<builtin>: recipe for target 'main' failed 
make: *** [main] Error 1 

任意のアイデアを作ります?

+0

は '--dry-run'を作る実行してみて、これはあなたがコマンドが実行を行い正確な表示されます。次に、このエラーがどのステップで発生し、なぜ発生しているのかを確認することができます。 –

+1

'g ++ main.cpp -o main'これはMakefileにあるものと同じではありません。 Makfileは余分な '-c'を持っています。 – kaylum

+1

とにかく、あなたのmakefileが間違って見えます。これは 'main'実行可能ファイルを生成しません。両方とも 'main.o'を生成する2つのターゲットがあります – kaylum

答えて

3

あなたが提供するメイクファイルが表示する出力を与える方法はありません。

あなたのコメントでは、はここに私のMakeFileです。 makeはMakeFileという名前のファイルは読み込みません。 Makefilemakefileという名前のファイルが読み込まれますが、大文字と小文字が区別されるファイルシステムを使用している場合、あなたのメークファイル名にMakeFileを使用しており、makeが見つかりません。

あなたの質問には単純に間違っている可能性がありますが、これは他の理由でmakeが使用しているメイクファイルにはなりません。

  1. あなたのコンパイル行に-o main.o
  2. あなたが追加されているライブラリ-lmについて、あなたは2つの異なる標的mainとコマンドが同じファイルを生成main.oを持っています。また

    、メイクファイルで多数のエラーがありますvector2.o;ライブラリはリンク線上に置くべきです。

一般に、メイクファイルがあなたの望むものに合っていることを確認するには、automatic variablesを使用する必要があります。ここで

があなたの状況のた​​めの合理的なメイクです:

CXX = g++ 

main: vector2.o main.o 
     $(CXX) -o [email protected] $^ -lm 

main.o: main.cpp 
     $(CXX) -c -o [email protected] $< 

vector2.o: src/Math/Vector2.cpp src/Math/Vector2.hpp 
     $(CXX) -c -o [email protected] $< 
+0

g ++ -o main main.o vector2.oは問題を修正しました。 – ulascan

関連する問題