繁体   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