我遇到了make的问题。我有3个文件。
main.cpp | src / Math / Vector2.cpp | SRC /数学/ Vector2.hpp
这是我的MakeFile:
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
当我手动复制这些命令时,它编译完全正常。 但是 $ make main 会返回
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 :(得分:3)
您提供的makefile无法显示您显示的输出。
在你的评论中你说这是我的MakeFile 。请注意,make不会读取名为MakeFile
的文件。它将读取名为Makefile
和makefile
的文件,但如果您使用区分大小写的文件系统,那么您所看到的行为的一个解释是您已使用MakeFile
你的makefile名称和make
找不到它。
或者,你可能在你的问题中只是不精确,但是这不能是因为某些其他原因而使用的makefile。
此外,您的makefile有很多错误:
main
和main.o
,其中命令生成相同的文件-o main.o
-lm
的编译行添加库vector2.o
;图书馆应该在链接线上。一般情况下,您应该使用automatic variables来确保您的makefile符合您的要求。
这是适合您情况的合理makefile:
CXX = g++
main: vector2.o main.o
$(CXX) -o $@ $^ -lm
main.o: main.cpp
$(CXX) -c -o $@ $<
vector2.o: src/Math/Vector2.cpp src/Math/Vector2.hpp
$(CXX) -c -o $@ $<