簡體   English   中英

在makefile中使用.o文件

[英]using .o files in makefile

我剛剛學習了關於makefile的一些知識,這是我的第一個問題。我有main.cpp hello.cpp factorial.cpp和functions.h文件

all: hello

hello: main.o factorial.o hello.o
    g++ main.o factorial.o hello.o -o hello

main.o: main.cpp
    g++ -c main.cpp

factorial.o: factorial.cpp
    g++ -c factorial.cpp

hello.o: hello.cpp
    g++ -c hello.cpp

clean:
    rm -rf *o hello

在上面的代碼中,為什么文件具有擴展名.o? 不應為.cpp或使用.cpp和.o有什么區別

構建C ++程序是一個分為兩個階段的過程。 首先,將每個.cpp文件編譯.o目標文件。 編譯將源代碼轉換為機器代碼,但不能解析來自其他源文件的函數調用(因為尚未編譯它們)。

main.o: main.cpp
    g++ -c main.cpp

factorial.o: factorial.cpp
    g++ -c factorial.cpp

hello.o: hello.cpp
    g++ -c hello.cpp

其次,將目標文件鏈接在一起以創建可執行文件。 鏈接可解析每個目標文件中的外部引用。

hello: main.o factorial.o hello.o
    g++ main.o factorial.o hello.o -o hello

順便說一句, clean目標中有一個錯字。 *o應該是*.o

clean:
    rm -rf *.o hello

.o表示“目標文件”,它們是從源代碼編譯的文件,但尚未鏈接到可執行文件或庫中。
在您的make文件中,即

main.o : main.cpp

表示將使用g++ -c main.cppmain.cpp創建main.o

最終,所有帶有.o文件都會創建可執行文件hello

hello: main.o factorial.o hello.o
     g++ main.o factorial.o hello.o -o hello

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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