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

alg*_*der 6 compiling c c++

你为什么要这样做

g++ -Wall -I/usr/local/include/thrift *.cpp -lthrift -o something
Run Code Online (Sandbox Code Playgroud)

代替:

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
Run Code Online (Sandbox Code Playgroud)

进而:

g++ -L/usr/local/lib -lthrift *.o -o Something_server
Run Code Online (Sandbox Code Playgroud)

第一步与第二个序列的作用基本相同,我说得对吗?

此外,为了使他们一致应该somethingSomething_server在第一线?

Mic*_*zek 18

你是对的,你最终会得到相同的可执行文件(尽管名称不同);在第一种情况下,gcc 实际上会创建一堆临时对象文件,链接后会删除这些文件,而第二种情况是您自己制作对象文件。

第二种方式做事的主要原因是允许增量构建。在您编译一次项目后,假设您更改了Something.cpp. 唯一受影响的目标文件是something.o——没有理由浪费时间重建其他目标文件。类似的构建系统make会识别并仅something.o在将所有目标文件链接在一起之前进行重建。