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

为什么要将多个 .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放在Something_server第一行?

答案1

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

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

相关内容