编译 – 为什么要将多个.cpp文件编译为同一个可执行文件?

你为什么这样做

g++ -Wall -I/usr/local/include/thrift *.cpp -lthrift -o something

代替:

g++ -Wall -I/usr/local/include/thrift -c Something.cpp -o something.o
g++ -Wall -I/usr/local/include/thrift -c Something_server.cpp -o server.o
g++ -Wall -I/usr/local/include/thrift -c your_thrift_file_constants.cpp -o constants.o
g++ -Wall -I/usr/local/include/thrift -c your_thrift_file_types.cpp -o types.o

然后:

g++ -L/usr/local/lib -lthrift *.o -o Something_server

我是对的,第一步与第二步完全相同吗?

另外,要使它们相同,第一行中的Something_server应该是什么?

最佳答案
你是对的,你最终会得到相同的可执行文件(尽管名字不同);在第一种情况下,gcc实际上会创建一堆临时目标文件,它们在链接后会删除,而第二种情况是您自己创建目标文件.

第二种方式做事的主要原因是允许增量建设.在您编译项目一次之后,请说您更改了Something.cpp.受影响的唯一对象文件是something.o – 没有理由浪费时间重建其他文件.像make这样的构建系统会在将所有目标文件链接在一起之前识别并重建某些内容.

转载注明原文:编译 – 为什么要将多个.cpp文件编译为同一个可执行文件? - 代码日志