[英]Makefile linking
我遇到了make问题。 我有3个档案。
main.cpp | src / Math / Vector2.cpp | src / Math / 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主要收益
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
有任何想法吗??
您提供的makefile不可能给您显示的输出。
在您的评论中,您说这是我的MakeFile 。 请注意,make不会读取名为MakeFile
的文件。 它会读取名为Makefile
和makefile
,但是如果您使用区分大小写的文件系统,那么对于所看到行为的一种解释是,您已经使用MakeFile
作为您的makefile名称,而make
无法找到它。
或者,您可能只是对问题不精确,但是由于其他原因,这可能不是make正在使用的makefile。
另外,您的makefile中存在许多错误:
main
和main.o
,其中命令生成相同的文件-o main.o
-lm
添加到vector2.o
的编译行中; 库应该在链接行上。 通常,您应该使用自动变量来确保您的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 $@ $<
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.