2017-06-14 83 views
0

我遇到了make問題。我有3個文件。Makefile鏈接

main.cpp | src/Math/Vector2.cpp | SRC /數學/ Vector2.hpp

這裏是我的生成文件:

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 

當我手動複製這些命令,它編譯完全沒有問題。 然而$使主回報

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' – kaylum

回答

3

您提供的makefile將無法提供您顯示的輸出。

在你的評論你說這是我的MakeFile。請注意,make不會讀取名爲MakeFile的文件。它會讀取名爲Makefilemakefile的文件,但如果您使用的是區分大小寫的文件系統,那麼您看到的行爲的一種解釋是,您已經使用MakeFile作爲makefile名稱,make找不到它。

或者,你可能在你的問題中簡單地不精確,但是這不能是由於某種其他原因而使用的makefile。

另外,還有一些與你的Makefile許多錯誤:

  1. 你有兩個不同的目標mainmain.o在命令生成相同的文件,-o main.o
  2. 你加入庫-lm到你的編譯線vector2.o;圖書館應該在鏈接上。

一般而言,您應該使用automatic variables以確保您的makefile與您希望它執行的操作相符。

這裏是您的具體情況合理的生成文件:

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