簡體   English   中英

Makefile鏈接

[英]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的文件。 它會讀取名為Makefilemakefile ,但是如果您使用區分大小寫的文件系統,那么對於所看到行為的一種解釋是,您已經使用MakeFile作為您的makefile名稱,而make無法找到它。

或者,您可能只是對問題不精確,但是由於其他原因,這可能不是make正在使用的makefile。

另外,您的makefile中存在許多錯誤:

  1. 您有兩個不同的目標mainmain.o ,其中命令生成相同的文件-o main.o
  2. 您正在將library -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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM