2017-06-14 66 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