[英]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.cpp
從main.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.